通过nodejs发送HTTPS发布请求

时间:2014-01-26 12:47:24

标签: node.js post https

编辑:代码是打字稿,但与JS非常相似,所以我希望这不是问题;)

我尝试发出HTTPS请求,但在错误事件中超时后才会“读取ECONNRESET”。

要对帖子数据进行编码,我使用require('querystring');并且工作正常,数据正是浏览器发送的内容。

var postData = querystring.stringify(data);

var postOptions = {
    host: 'my.host.com',
    port: 443,
    path: '/openid/loginsubmit',
    method: 'POST',
    headers: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'en-US,en;q=0.5',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Referer':' https://my.host.com/openid/login',
        'Content-Length': postData.length // 157 in web
    },
    rejectUnauthorized: false
};

我带了我跟Fiddler跟踪的所有标题,以确保没有理由在服务器端拒绝我的请求。

然后我开始尝试使用以下方式发送请求:

var resString = '';
var postReq:any = https.request(postOptions, (httpRes:any) => {
    console.log("statusCode: ", httpRes.statusCode);
    console.log("headers: ", httpRes.headers);

    httpRes.on('data', function (chunk) {
        resString += chunk;
        console.log('Response: ' + chunk);
    });
    httpRes.on('end', function () {
        res.send(resString);
    });
});

postReq.on('error', (err) => {
    console.error('ERROR failed to login into website');
    res.send(err.message);
});

postReq.write(postData); // even tried to add 'utf8' as second parameter
postReq.end();

现在我得到的是在消息read ECONNRESET

超时后的错误

如果有人可以帮助我提供一个示例(可能在某个任意的https主机上)https发布请求有效,那将会有很大帮助。

还是有一些错误吗?也许我必须在某处提供一些服务器证书来加密我的帖子数据?

0 个答案:

没有答案