当前位置: 首页 > 知识库问答 >
问题:

在node.js上使用Bulit-in Http模块而不是请求模块

闻人鸿飞
2023-03-14

我想通过Node.js将表单数据发送到web-server,所以我使用了Nodeland中非常有名的“请求”模块。它很酷,没有问题,但由于某种原因(不支持写流编码),我不得不将它改为内置模块,“HTTP”。

我认为下面的代码是一样的,将一些数据发布到Web服务器上,当我使用“请求”模块时,没有问题,所以可以得到200响应,发送数据成功。

通过使用“请求”模块

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();
}

共有1个答案

秦昊穹
2023-03-14

内置的http客户端不会自动跟踪转发,而request模块会(并且具有许多其他“高级”特性)。因此,如果要继续使用内置客户端,则需要手动检查res.headers.location并在该URL重试请求。

 类似资料:
  • 问题内容: 此模块是“请求https://github.com/mikeal/request 我想我正在遵循每个步骤,但我错过了一个论点。 另一方面,我有 而且我知道php没错… 问题答案: 编辑: 您应该签出Needle。它为您做到了这一点,并支持多部分数据,以及更多。 我发现我缺少标题

  • 问题内容: 我安装了request模块,并收到错误消息: 我已经阅读了有关此错误的所有文章,并了解这是因为未全局找到模块请求,但是我已经尝试了2条建议 npm安装请求-g 应该把它安装在/ usr / loca / bin吗?因为我在那里看不到。 和 sudo npm链接 / usr / local / lib / node_modules / request-> / Users / soulso

  • 我在Ubuntu 14.04机器上安装了Python 2.7和3.4。我想安装请求模块,以便从Py3.4访问它。 当我在终端命令行发出

  • 问题内容: 我一直在学习有关node.js和模块的信息,似乎无法让Underscore库正常工作……似乎我第一次使用Underscore中的函数时,它会覆盖_对象,其结果为我的函数调用。有人知道发生了什么吗?例如,这是来自node.js REPL的会话: 当我自己制作Javascript文件并将其导入时,它们似乎工作正常。Underscore库也许有一些特别之处? 问题答案: Node REPL使

  • 似乎有很多不同的方法可以做到这一点,但我试图只使用sinon,sinon-test,chai/mocha,axios,httpmock模块。我无法成功模拟使用axios进行的GET调用。我希望能够模拟来自axios调用的响应,这样单元测试实际上就不必发出外部API请求。 我尝试过通过创建沙箱来建立一个基本的单元测试,并使用sinon stub来建立一个GET调用并指定预期的响应。我不熟悉JavaS

  • 我试图使用带有模块的PasteBin API创建一个新的粘贴,如下所示: 我的理解是,由于方法是并且提供了querystring参数,对象中的值将作为对存储在正文中。(参考:如何在HTTP POST请求中发送参数?) 当发出请求并提供时,参数究竟是如何发送的? 如何仅使用模块发送URL编码的正文?