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

2017-08-31 01:16:05 +08:00
 fuxkcsdn

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

# 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);
4232 次点击
所在节点    Node.js
2 条回复
vietor
2017-08-31 08:13:30 +08:00
pipe 到 buffer stream
fuxkcsdn
2017-08-31 09:39:04 +08:00
@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);
});
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/387053

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX