1

我有一个运行良好的代理(据我所知),直到我尝试代理图像(或者可能是任何二进制数据?)。根据我的估计,下面的代码应该可以工作,但事实并非如此。我确定我在做一些明显愚蠢的事情,但我一直在挖掘论坛和 api,但我还没有找到正确的方法。

我的代理的“核心”如下所示。

  function(req, res) {
    ...

    options = {
      url: 'a url',
      headers: {
        'Authorization': auth
      }
    };

    request(options,
      function(e, r, b){
        var encoding = (r.headers['content-type'].indexOf('image') === -1) ? 'utf8' : 'binary';

        res.writeHead(200, {
          'Content-Length': r.headers['content-length'],
          'Content-Type': r.headers['content-type']
        });

        if (encoding === 'binary') {
          b = new Buffer(b);
        }

        res.end(b, encoding);
      });
    }

我在这里想念什么?

提前感谢您的任何帮助!

4

1 回答 1

2

我的问题不在于响应(就像我最初一样),而是请求模块默认将其响应主体编码为 un​​icode 的事实,当禁用(encoding: null)时,响应主体将转换为易于使用的缓冲区响应。

    options = {
      url: url,
      encoding: null,
      headers: {
        'Authorization': auth
      }
    };

    request(options,
      function(e, r, b){
        var encoding = (r.headers['content-type'].indexOf('image') === -1) ? 'utf8' : 'binary';
        res.end(b, encoding);
      });
于 2014-03-01T18:25:05.697 回答