我想使用Node.js将表单数据发送到Web服务器,所以我使用了nodeland中非常有名的“请求”模块。这很酷,没有问题,但由于某种原因(写入流编码不支持),我必须将其更改为内置模块“http”。
我认为下面的代码与将一些数据发布到网络服务器相同,当我使用“请求”模块时,没有问题,因此可以获得200 response
,成功发送数据。
但是在“http”模块中,我得到了一个重定向到另一个页面的302 response
。和失败的帖子数据。我不知道有什么问题,也许是URL的麻烦,另一方面http使用'host and path',请求使用'url'。我不知道怎么解决这个问题,我坚持了2天,请告诉我如果你有一些提示......
感谢。
使用“请求”模块
function postFormByRequestModule() {
request({
url: 'http://finance.naver.com/item/board_act.nhn',
headers: { 'Content-Type': 'text/plain' },
method: 'POST',
form: {
code:'000215',
mode: 'write',
title: 'This is Title',
body:'This is body'
}
}, function (error, response, body) {
if (error) {
console.log(error);
} else {
console.log(response.statusCode, response.body);
}
});
}
使用“Http”模块
var postData = querystring.stringify({
code:'000215',
mode: 'write',
title: 'This is Title',
body:'This is body'
});
var options = {
host: 'finance.naver.com',
path: '/item/board_act.nhn',
method: 'POST',
headers: { 'Content-Type': 'text/plain', }
};
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
res.on('end', function() {
console.log('No more data in response.')
})
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
function postFormByBuiltInHttpModule() {
req.write(postData);
req.end();
}
答案 0 :(得分:0)
内置的http客户端不会自动跟进,而request
模块会执行(并且还有许多其他“高级”功能)。因此,如果您想继续使用内置客户端,则需要手动检查res.headers.location
并在该网址重试该请求。