好吧,這個問題在過去一直被問到,但沒有令人滿意的答案;至少爲了我的目的。長話短說,使用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
無論如何工作?如果這是真的,你知道爲什麼,或者你能指點我理解問題的正確方向嗎?
在此先感謝您的幫助!
謝謝。像魅力一樣工作。 :-) 祝你有美好的一天! – MightyMouse 2014-09-27 23:53:23