如何使用 Node.js 中的请求库获取原始 HTTP 消息体?
How can I get the raw HTTP message body using the request library in Node.js?
npm-request 库允许我使用漂亮的 JSON 风格的语法构造 HTTP 请求,如下所示。
request.post(
{
url: 'https://my.own.service/api/route',
formData: {
firstName: 'John',
lastName: 'Smith'
}
},
(err, response, body) => {
console.log(body)
}
);
但为了进行故障排除,我确实需要查看 请求 的 HTTP 消息正文,因为它会出现在网络上。理想情况下,我正在寻找带有 Node.js Buffer
对象的原始字节表示。似乎很容易得到这个响应,但不是请求。我对 multipart/form-data
.
特别感兴趣
我查看了文档和 GitHub 个问题,但无法弄明白。
您可以尝试@jfriend00 建议使用像 wireshark 这样的网络嗅探器,但是当您获取 https
URL 时,这可能不是最简单的方法,因为它需要一些设置来拦截 TLS连接。
所以也许为请求模块本身打开调试模式就足够了,您可以通过简单地设置 require('request').debug = true
来做到这一点。作为第三个选项,您可以使用请求 here 的专用调试模块,它允许您查看请求和响应 headers 以及正文。
我可以想出很多方法来查看请求的字节数:
在请求模块中打开调试。有多种方法可以做到 here including setting NODE_DEBUG=request
or require('request').debug = true
or using the request-debug module.
使用网络嗅探器查看通过套接字实际发送的内容,与您的 node.js 代码无关。
创建您自己的虚拟 http 服务器,它只记录确切的传入请求并将您的相同请求发送到该虚拟服务器,以便它可以为您记录。
创建或使用代理(如 nginx),它可以在将传入请求转发到最终目的地之前转储确切的传入请求,并将请求发送到代理。
在调试器中逐步发送请求,以准确查看它向套接字写入的内容(这可能很耗时,尤其是使用异步回调时,但最终会起作用)。
我想出了如何使用 Request 转储 HTTP 消息体。在这两种情况下,我只是复制 request
使用 internally.
的相同方法
多部分表单上传
req._form.pipe(process.stdout);
URL-编码形式
console.log(req.body);
最简单的方法是在任意端口启动 netcat 服务器:
$ nc -l -p 8080
并在您的代码中将 URL 更改为本地主机:
https://localhost:8080/v1beta1/text:synthesize?key=API_KEY
现在,发出的任何请求都将打印发送到本地主机服务器的整个原始 HTTP 消息。
显然,您将无法看到响应,但是整个原始请求数据将可供您在具有 netcat 的终端中进行检查 运行
npm-request 库允许我使用漂亮的 JSON 风格的语法构造 HTTP 请求,如下所示。
request.post(
{
url: 'https://my.own.service/api/route',
formData: {
firstName: 'John',
lastName: 'Smith'
}
},
(err, response, body) => {
console.log(body)
}
);
但为了进行故障排除,我确实需要查看 请求 的 HTTP 消息正文,因为它会出现在网络上。理想情况下,我正在寻找带有 Node.js Buffer
对象的原始字节表示。似乎很容易得到这个响应,但不是请求。我对 multipart/form-data
.
我查看了文档和 GitHub 个问题,但无法弄明白。
您可以尝试@jfriend00 建议使用像 wireshark 这样的网络嗅探器,但是当您获取 https
URL 时,这可能不是最简单的方法,因为它需要一些设置来拦截 TLS连接。
所以也许为请求模块本身打开调试模式就足够了,您可以通过简单地设置 require('request').debug = true
来做到这一点。作为第三个选项,您可以使用请求 here 的专用调试模块,它允许您查看请求和响应 headers 以及正文。
我可以想出很多方法来查看请求的字节数:
在请求模块中打开调试。有多种方法可以做到 here including setting
NODE_DEBUG=request
orrequire('request').debug = true
or using the request-debug module.使用网络嗅探器查看通过套接字实际发送的内容,与您的 node.js 代码无关。
创建您自己的虚拟 http 服务器,它只记录确切的传入请求并将您的相同请求发送到该虚拟服务器,以便它可以为您记录。
创建或使用代理(如 nginx),它可以在将传入请求转发到最终目的地之前转储确切的传入请求,并将请求发送到代理。
在调试器中逐步发送请求,以准确查看它向套接字写入的内容(这可能很耗时,尤其是使用异步回调时,但最终会起作用)。
我想出了如何使用 Request 转储 HTTP 消息体。在这两种情况下,我只是复制 request
使用 internally.
多部分表单上传
req._form.pipe(process.stdout);
URL-编码形式
console.log(req.body);
最简单的方法是在任意端口启动 netcat 服务器:
$ nc -l -p 8080
并在您的代码中将 URL 更改为本地主机:
https://localhost:8080/v1beta1/text:synthesize?key=API_KEY
现在,发出的任何请求都将打印发送到本地主机服务器的整个原始 HTTP 消息。
显然,您将无法看到响应,但是整个原始请求数据将可供您在具有 netcat 的终端中进行检查 运行