0

我正在使用节点创建一个小型 icloud 客户端,以便我可以提取一些数据并对其进行分析。我目前正在编写登录序列的脚本。当我收到响应时,标头很好,并且我期望的会话 cookie 在那里,但是应该是 JSON 的响应正文看起来是加密的,它甚至不是纯文本。它通过 SSL,但如果标题是可读的,那么正文不应该也是如此吗?是否有我缺少的设置或节点中的错误,我使用的是最新的 0.8.1

{ date: 'Sat, 07 Jul 2012 14:51:56 GMT',
 'x-apple-request-uuid': '............',
 'x-responding-instance': '...........',
 'cache-control': 'no-cache, no-store, private',
 'access-control-allow-origin': 'https://www.icloud.com',
 'access-control-allow-credentials': 'true',
 'set-cookie': [........],
 'content-type': 'application/json; charset=UTF-8',
 'content-encoding': 'gzip',
 'content-length': '126' }
���������VJ-*�/R�R
K��LI,IUJ-,M-.Q��U��,.��KW��u�q�
wur
��
��v�SH����LU�Q��+.I�KN�bhldijiaaf/.MNN-.V�JK�)N��$���l���
4

1 回答 1

6

根据响应头content-encoding: gzip,响应没有加密,只是压缩了。您可以使用 Node 的zlib模块即时解压缩它。这是一个使用我的博客主页作为端点的示例(因为我的服务器在被询问时会使用 gzip 压缩的数据进行响应):

http = require('http');
zlib = require('zlib');
url = require('url');

var uri = url.parse("http://brandontilley.com/");
uri.headers = {'accept-encoding': 'gzip'};

var request = http.get(uri, function(res) {
  var buffers = [];
  res.pipe(zlib.createGunzip()).on('data', function(chunk) {
    buffers.push(chunk);
  }).on('end', function() {
    console.log(Buffer.concat(buffers).toString());
  });
});
request.end();

zlib 模块的 Node.js 文档中有更多示例。

于 2012-07-07T18:10:51.750 回答