【问题标题】:how to get a json file from another domain in with node request?如何通过节点请求从另一个域获取 json 文件?
【发布时间】:2015-12-19 06:54:53
【问题描述】:

我在远程服务器中有一个 json 文件。 <domainName>/info.json。当我导航到我得到的网址时:

{
  "version": "1.8 RC05"
}

但是当我从终端执行curl <domainname>/info.json 时,我会得到类似的信息:

�T*K-*�RP2Գr60Uk�%�c9@

当我使用节点request如下:

app.get('/', function(req,res){
    request.get('<domainname>/info.json').on('response', function(data){
        data = data.setEncoding('utf8');
        console.log(data.statusCode);
        res.json(data);
    });
});

我收到以下回复:

     {
      "statusCode": 200,
      "headers": {
        "content-type": "application\/json; charset=utf-8",
        "content-length": "46",
        "connection": "close",
        "date": "Tue, 22 Sep 2015 09:56:22 GMT",
        "content-encoding": "gzip",
        "cache-control": "max-age=1800, public",
        "last-modified": "Mon, 21 Sep 2015 09:57:35 GMT",
        "etag": "\"93934d435cecbf8f5bde8627903587a0\"",
        "server": "AmazonS3",
        "age": "903",
        "x-cache": "Hit from cloudfront",
        "via": "1.1 44e39d55d481d0cc2faa76f70b7a556b.cloudfront.net (CloudFront)",
        "x-amz-cf-id": "eOy_rb3vasUnhb9bvvKI3AZvcvXAzJeJCI3TmK94ZlaxHu1XwBKzGg=="
      },
      "request": {
        "uri": {
          "protocol": "https:",
          "slashes": true,
          "auth": null,
          "host": "<domainname>",
          "port": 443,
          "hostname": "<domainname>",
          "hash": null,
          "search": null,
          "query": null,
          "pathname": "\/info.json",
          "path": "\/info.json",
          "href": "<domainname>\/info.json"
        },
        "method": "GET",
        "headers": {

        }
      }
    }

我认为它与charset=utf-8 有关系,但不知道如何进行。如何让我的节点应用程序获取第一个 json 对象并提供它?

编辑 1

正如答案中所建议的,我为身体服务如下:

app.get('/', function(req,res){
    request('<domainname>/info.json', function (error, response, body) {
      if (!error && response.statusCode == 200) {
        console.log(body)
      }
    });
});

现在我得到以下回复:

"\u001f�\b\u0000\u0000\u0000\u0000\u0000\u0000\u0003���T*K-*���S�RP2ԳP\br60U��\u0005\u0000k�%�\u001a\u0000\u0000\u0000"

【问题讨论】:

    标签: json node.js utf-8 utf8-decode node-request


    【解决方案1】:

    试试这个:

    console.log(body.toString('ascii'))
    

    【讨论】:

      【解决方案2】:

      请参阅Node Request Docs

      您可能想要发送body,而不是整个response

      app.get('/', function(req,res){
          request('<domainname>/info.json', function (error, response, body) {
            if (!error && response.statusCode == 200) {
              console.log(body)
            }
          })
      });
      

      您可能还想对响应进行 gzip/解压缩。

      为此,您可以使用Nodes Zlib implementation

      您可以在此处查看其使用示例How do I ungzip (decompress) a NodeJS request's module gzip response body?

      【讨论】:

      • 好的,所以我们在响应部分遇到了一个问题。但我仍然收到���T*K-*���S�RP2Գr60U��k�%� 的服务。
      • 在浏览器中,这是\u001f�\b\u0000\u0000\u0000\u0000\u0000\u0000\u0003���T*K-*���S�RP2ԳP\br60U��\u0005\u0000k�%�\u001a\u0000\u0000\u0000
      • 查看添加到我上面帖子中的附加信息。
      • 我无法控制托管 info.json 的服务器
      • 您似乎对响应做了一些奇怪的事情 - 我可以点击 URL 并按预期读取响应。我也可以浏览它并查看它。上面显示的不正确响应 - 我假设这些是 在您检索它并吐回之后?如果您 console.log 来自节点的响应,控制台会显示什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2014-09-09
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2022-01-26
      • 2021-03-07
      相关资源
      最近更新 更多