2014-09-27 128 views
0

好吧,這個問題在過去一直被問到,但沒有令人滿意的答案;至少爲了我的目的。長話短說,使用curl張貼數據到遠程(注:https)服務器有以下工作:節點錯誤:SSL23_GET_SERVER_HELLO:未知協議和SSL3_GET_RECORD:錯誤版本號

curl -X POST 'https://a.b.c.d/somewhere/' --data 'somedata' --header "Content-Type: text/turtle" -i 

現在,時間一到就做使用節點同樣的事情。我的功能正常工作,如果不使用https模塊,而是使用http模塊,則會收到一條消息,我必須再次嘗試使用https。所以,我使用HTTPS來發出請求,與下面的選項:

var myOptions = { 
    hostname : "a.b.c.d", 
    port  : "80", 
    path  : "/somewhere/", 
    method : 'POST', 
    headers : { 
     'Content-Type' : 'text/turtle', 
     'Content-Length' : message.length 
     }, 
    secureProtocol : 'SSLv3_method' 
}; 

這裏順便說一下,我也檢查了捲曲傳遞參數--sslv3時工作正常。

然而,通過上述方式,我得到以下錯誤

140735237133072:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:787: 

如果我的代碼頂部我把形式的語句(想法來自here

https.globalAgent.options.secureProtocol = 'SSLv3_method'; 

然後實際的錯誤信息更改爲

140735237133072:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:../deps/openssl/openssl/ssl/s3_pkt.c:338: 

我發現這個意外,因爲我有alr eady在選項部分中指出我想要SSLv3_method用作協議。無論如何,我將如何從命令行重現curl的行爲,其中一切正常?

最後,here提到端口80可能是一個錯誤的端口用於https使用它。這是真的嗎?爲什麼curl無論如何工作?如果這是真的,你知道爲什麼,或者你能指點我理解問題的正確方向嗎?

在此先感謝您的幫助!

回答

4

您應該有port: 443,或只是將其設置爲未設置,因爲當使用https模塊而不是port: "80"時,443是默認端口。

cURL沒有端口,因爲它知道默認情況下https://是端口443。你可以可以作爲第一個參數(如cURL)傳遞一個url到https.request(),但是你不能自定義methodheaders,或者其他任何不能單獨由URL確定的東西。

+0

謝謝。像魅力一樣工作。 :-) 祝你有美好的一天! – MightyMouse 2014-09-27 23:53:23

相關問題