V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fuxkcsdn
V2EX  ›  Node.js

request 如何获取到带 http status 和 http headers 的 rawResponse,类似 curl -i --raw 的输出?

  •  
  •   fuxkcsdn · 2017-08-31 01:16:05 +08:00 · 4239 次点击
    这是一个创建于 2642 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是否有办法返回如下格式的文本?

    # curl -i --raw  https://httpbin.org/ip 
    HTTP/1.1 200 OK
    Connection: keep-alive
    Server: meinheld/0.6.1
    Date: Wed, 30 Aug 2017 16:36:59 GMT
    Content-Type: application/json
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Credentials: true
    X-Powered-By: Flask
    X-Processed-Time: 0.000962972640991
    Content-Length: 31
    Via: 1.1 vegur
    
    {
      "origin": "11.52.71.4"
    }
    

    目前是使用

    var headers = '';
    for (var i = 0; i < rsp.rawHeaders.length; i++) {
      headers += i % 2 ? (rsp.rawHeaders[i] + '\r\n') : (rsp.rawHeaders[i] + ': ');
    }
    
    console.log('HTTP/' + rsp.httpVersion + ' ' + rsp.statusCode + ' ' + rsp.statusMessage
      + '\r\n' + headers + '\r\n' + rsp.body);
    
    2 条回复    2017-08-31 09:39:04 +08:00
    vietor
        1
    vietor  
       2017-08-31 08:13:30 +08:00 via Android
    pipe 到 buffer stream
    fuxkcsdn
        2
    fuxkcsdn  
    OP
       2017-08-31 09:39:04 +08:00 via iPhone
    @vietor 我用下面 2 种方法获取到的都只有 response body,我用的方法和你说的不一样吗?还是我哪里用错了?

    ```javascript
    const fs = require('fs');
    const request = require('request');

    var bufs = [];
    request('https://httpbin.org/get')
    .on('data', function(d) {
    bufs.push(d);
    }).on('end', function() {
    console.log(Buffer.concat(bufs).toString());
    });

    request('https://httpbin.org/get').pipe(fs.createWriteStream('/tmp/response.raw'));

    request('https://httpbin.org/get', function(err, rsp, body) {
    // 上面 2 种方法获取到的数据就是 body 的数据
    console.log(body);
    });
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1980 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:48 · PVG 08:48 · LAX 16:48 · JFK 19:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.