好吧,这个问题在过去一直被问到,但没有令人满意的答案;至少为了我的目的。长话短说,使用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