HTTP 标头案例

Pab*_*blo 4 node.js

我正在处理服务器,它不接受未大写的标头,不幸的是我不能做太多。

var headers = {};
headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36';
headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
headers['Connection'] = 'keep-alive';
headers['Cache-Control'] = 'max-age=0';
headers['Upgrade-Insecure-Requests'] = '1';
headers['Accept-Encoding'] = 'gzip, deflate';
headers['Accept-Language'] = 'en-US,en;q=0.9,ru;q=0.8,hy;q=0.7';

request.post({url: 'http://10.10.10.10/login', headers: headers, ...
Run Code Online (Sandbox Code Playgroud)

这实际上发出以下

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ru;q=0.8,hy;q=0.7
DNT: 1
host: 10.10.10.10
cookie: vvv=765936875155218941
Run Code Online (Sandbox Code Playgroud)

cookie并且host是小写的。如何更改request, 以发送大写标题?

Est*_*ask 5

这不是 Node.js 问题,而是特定库request. 事实上,这根本不是问题,因为HTTP 标头不区分大小写request使用caselesspackage 来强制使用小写的标头,因此如果需要一致性,预计用户标头将是小写的。

这些标头可以保持原样,因为它们应该由远程服务器根据规范正确处理。

如果请求应该模拟真实的客户端请求,则可能需要特定的标头情况。在这种情况下,可以在请求之前手动遍历标头对象,例如:

const normalizeHeaderCase = require("header-case-normalizer");

const req = request.post('...', { headers: ... });

for (const [name, value] of Object.entries(req.headers)) {
    delete req.headers[name];
    req.headers[normalizeHeaderCase(name)] =  value;
}

req.on('response', function(response) {...});
Run Code Online (Sandbox Code Playgroud)