如何通过节点请求从另一个域获取 json 文件?
how to get a json file from another domain in with node request?
我在远程服务器中有一个 json 文件。 <domainName>/info.json
。当我导航到 url 时,我得到:
{
"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 object 并提供服务?
编辑 1
按照回答中的建议,我按如下方式提供 body:
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"
您可能希望发送 body
,而不是整个 response
:
app.get('/', function(req,res){
request('<domainname>/info.json', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
})
});
您可能还想 gzip/decompress 回复。
为此你可以使用 Nodes Zlib implementation
您可以在此处查看其使用示例 How do I ungzip (decompress) a NodeJS request's module gzip response body?
试试这个:
console.log(body.toString('ascii'))
我在远程服务器中有一个 json 文件。 <domainName>/info.json
。当我导航到 url 时,我得到:
{
"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 object 并提供服务?
编辑 1
按照回答中的建议,我按如下方式提供 body:
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"
您可能希望发送 body
,而不是整个 response
:
app.get('/', function(req,res){
request('<domainname>/info.json', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
})
});
您可能还想 gzip/decompress 回复。
为此你可以使用 Nodes Zlib implementation
您可以在此处查看其使用示例 How do I ungzip (decompress) a NodeJS request's module gzip response body?
试试这个:
console.log(body.toString('ascii'))