好吧,这个问题在过去曾被问过,但没有令人满意的答案,至少在我结束之前是这样的。长话短说,使用curl将数据发布到远程服务器(注意:https),其工作如下:
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时,我还检查了curl是否正常工作。
但是,使用上面的选项,我会得到以下错误
140735237133072:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:787:如果在我的代码之上放置了表单的语句(here中的idea)
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:我发现这是出乎意料的,因为我已经在options部分中指出,我希望使用SSLv3_method作为协议。在任何情况下,我如何能够在命令行中再现curl的行为?
最后,here提到了端口80可能是与https一起使用它的错误端口。这是真的吗?为什么curl会工作呢?如果这是真的,你知道为什么,或者你能为我指出正确的方向来理解这个问题吗?
提前感谢您的帮助!
发布于 2014-09-27 21:00:16
您应该拥有port: 443,,或者不设置它,因为在使用https模块时,443是默认端口,而不是port: "80"。
cURL在没有端口的情况下工作,因为它知道默认情况下https://是端口443。您可以将url作为第一个参数传递给https.request() (如cURL),但随后不能自定义method、headers或其他无法单独从URL确定的内容。
https://stackoverflow.com/questions/26077867
复制相似问题