【发布时间】:2014-11-22 13:05:30
【问题描述】:
好的,过去也有人问过同样的问题,但没有满意的答案;至少对我而言。长话短说,使用curl 将数据发布到远程(注意:https)服务器,其工作如下:
curl -X POST 'https://a.b.c.d/somewhere/' --data 'somedata' --header "Content-Type: text/turtle" -i
现在,是时候使用 node 来做同样的事情了。我的功能工作正常,如果我不使用 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'
};
顺便说一句,我还检查了 curl 在传递参数 --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:
我发现这出乎意料,因为我已经在选项部分指出我希望将SSLv3_method 用作协议。无论如何,我如何能够从一切正常的命令行重现curl 的行为?
最后,here 提到端口 80 可能是与 https 一起使用的错误端口。这是真的吗?为什么curl 仍然可以工作?如果是真的,你知道为什么吗,或者你能指出我理解问题的正确方向吗?
提前感谢您的帮助!
【问题讨论】: