我可以通過這種方式獲取原始 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
...
uj5u.com熱心網友回復:
我很好奇你真正想解決什么問題,因為可能有更好的方法。
但是,如果您只想侵入給定的回應以準確查看通過該套接字發送的內容,則可以對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 中的一些除錯標志,這些標志會自動輸出,但找不到任何。'net' 模塊確實有一些除錯功能,但它與套接字事件和生命周期有關,與發送/接收的實際資料無關。
僅供參考,您還可以使用諸如 WireShark(還有許多其他網路分析器)之類的網路分析器“檢查”原始網路資料,這些分析器會修補到您的網路配接器中,并且可以配置為觀察事物并準確顯示正在發送/接收的資料.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385061.html
標籤:javascript 节点.js http
