请求服务器不要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的。