簡體   English   中英

在 NodeJS 中獲取原始 HTTP 響應

[英]Get raw HTTP response in NodeJS

我可以通過這種方式獲取原始 HTTP 請求:

// ...
server.listen(8080);
 
server.on('connection', function(socket) {
  socket.on('data', function(data) {
    console.log(data.toString());
  });
});

但是我怎樣才能在 NodeJS 中得到我的原始答案(HTTP 響應)? 我需要類似的東西(在我的 NodeJS 中,而不是瀏覽器中):

HTTP 200 OK
Content-Length: 1000
...

我很好奇你真正想解決什么問題,因為可能有更好的方法。

但是,如果您只是想侵入給定的響應以查看通過該套接字發送的確切內容,您可以socket.write()方法以執行以下操作:

const app = require('express')();

app.get("/", (req, res) => {
    // monkey patch socket.write
    // so we can log every sent over the socket
    const socket = req.socket;
    socket.origWrite = socket.write;
    socket.write = function(data, encoding, callback) {
        if (Buffer.isBuffer(data)) {
            console.log(data.toString());
        } else {
            console.log(data);
        }
        return socket.origWrite(data, encoding, callback);
    }
    res.cookie("color", "blue");
    res.send("Hi.  This is my http response.")
});

app.listen(80);

當我運行它並向該路由發出瀏覽器請求時,我在控制台中看到了這個:

HTTP/1.1 200 OK
X-Powered-By: Express
Set-Cookie: color=blue; Path=/
Content-Type: text/html; charset=utf-8
Content-Length: 30
ETag: W/"1e-eJoRAEkyvi+cvBVvRkYOHolFbNc"
Date: Wed, 15 Dec 2021 19:43:20 GMT
Connection: keep-alive
Keep-Alive: timeout=5


Hi.  This is my http response.

這與 Chrome 調試器顯示的 http 響應在事物的接收端完全匹配。

我花了相當多的時間尋找一些內置在 nodejs 中的調試標志,這些標志會自動 output ,但找不到。 'net' 模塊確實有一些調試,但它與套接字事件和生命周期有關,而不是與發送/接收的實際數據有關。


僅供參考,您還可以使用諸如 WireShark 之類的網絡分析器(還有許多其他網絡分析器)“檢查”原始網絡數據,這些分析器會修補到您的網絡適配器中,並且可以配置為觀察並准確顯示正在發送/接收的數據.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM