我正在处理服务器,它不接受未大写的 header ,不幸的是我不能用它做太多事情。
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, ...
这实际上发出了以下内容
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
cookie
和 host
是小写的。如何更改 request
以发送大写 header ?
最佳答案
这不是 Node.js 问题,而是特定库 request
的假定问题。事实上,这根本不是问题,因为 HTTP headers are case-insensitive . request
使用 caseless
包来强制小写 header ,因此如果需要一致性,预计用户 header 将是小写的。
这些 header 可以保留原样,因为它们应该由远程服务器根据规范正确处理。
如果请求应该模仿真实的客户端请求,则可能需要特定的 header 大小写。在这种情况下,可以在请求之前手动遍历 header 对象,例如:
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) {...});
关于node.js - HTTP header 大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51263607/