请求服务器不要gzip内容
是否有可能用一个http请求头来要求服务器不要 gzip内容?
我正在使用node.js request.get
库进行API调用,看起来内容正在以gzipforms返回。
它只有1 api(我打电话几个)的问题,我想也许他们的服务器configuration错误。 但我想尝试问服务器的非gzip版本。
这是我得到的回应:
GET https://www.itbit.com/api/feeds/ticker/XBTUSD 4R &HTpȇ {3y L 3 SJ)$ Qj ) w\d P ('t]{ d@ ? ŔŅ 2 1Y _ -X% uS } Y ` gN? -sP rr6 .셢$ h ] h > <]@ mx- d 鑈 ` +fos r % ~G c E) ̓5pqXK h S < ,M F P n ' @ +@ ]琛 Ʒ{q ܀ 6u* lygnؓ z ë>X rS). s!Z U "Fg :zL mx W _ѯ ^ <l ۊp? t H 1ǎ e- zCw @ e 4 r ke z zN o 8 5 \B<3 HL~g! I ȥ .贡h_ aE ]X~ E _ /7 h Ia 3 H:\ Âi l 2 ;]w;ގ: \ s ( 4 hV咸 q /g v
这确实是一个非常奇怪的服务器。
这似乎阻止它发回gzip内容:
request({ url : 'https://www.itbit.com/api/feeds/ticker/XBTUSD', headers : { 'User-Agent' : '' } }, ...);
(或其他一些随机的User-Agent
头部;它可能是基于某些HTTP头部的caching请求,随机化这些头部可能会阻止它服务已经caching的gzip压缩的响应)
假设我正确地理解了你的问题,你可以明确地为你的HTTP GET
请求中的Accept-Encoding头提供一个值。
request({ url: '...', headers: { 'Accept-Encoding': 'identity' } }, function(err, res, body){ });
这假设您要求的服务器尊重Accept-Encoding
标头。 如果没有,那么你唯一的select就是解压缩内容。
var zlib = require('zlib'); var req = request.get(...); req.on('response', function(res){ var stream; if (res.headers['content-encoding'] === 'gzip'){ stream = res.pipe(zlib.createGunzip()); } else { stream = res; } var chunks = []; stream.on('readable', function(){ var chunk; while ((chunk = stream.read()) !== null) chunks.push(chunk); }); stream.on('end', function(){ var body = Buffer.concat(chunks); // Do what you'd normally do. }); });
这是如何有条件地解压缩基于内容编码的请求。 也就是说,这个API看起来很不一致,因为用你给出的URL运行这个返回一个堆栈跟踪。 正如@robertklep指出的那样,他们似乎也在做一些用户代理检查,所以看起来这个API并不是真正为公共消费devise的。