Node.js 对 Mailchimp 的 HTTP 获取请求 Returns 错误
Node.js HTTP Get Request to Mailchimp Returns Error
每当我 运行 以下 curl 代码时,我对 Mailchimp 3.0 API 的请求都会正常进行:
curl --request GET \
--url 'https://us12.api.mailchimp.com/3.0/' \
--user 'anystring:APIKEY'
但是,每当我使用 Node.js 向 API 发出请求时,我都会收到以下错误:
Got error: connect ECONNREFUSED 127.0.0.1:80
我假设我的 .js 文件中遗漏了一些东西或有一些不匹配的东西,关于那可能是什么的任何想法?节点代码如下:
"use strict";
/* globals require, console */
var http = require('http');
var options = {
url: 'https://us12.api.mailchimp.com/3.0/',
headers: {
'Authorization': 'anystring:APIKEY',
'Content-Type': 'application/json',
}
};
http.get(options, (res) => {
console.log(`Got response: ${res.statusCode}`);
// consume response body
res.resume();
}).on('error', (e) => {
console.log(`Got error: ${e.message}`);
});
编辑:使用未捕获的异常returns以下内容:
Error: connect ECONNREFUSED 127.0.0.1:80
at Object.exports._errnoException (util.js:856:11)
at exports._exceptionWithHostPort (util.js:879:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1053:14)
编辑 2:修复了其中的一部分。使用 url
作为我的选项之一,而不是 host
。这是该部分的正确代码:
var options = {
host: 'https://us12.api.mailchimp.com/3.0/',
headers: {
'Authorization': 'anystring:APIKEY',
'Content-Type': 'application/json',
}
};
现在我收到的是回溯 Got response: 400
而不是我要提取的数据。
根据documentation,选项中没有url 属性。
您应该指定主机和路径。
您的选项对象应如下所示。
var options = {
host: 'https://us12.api.mailchimp.com',
path : '/3.0/'
headers: {
'Authorization': 'anystring:APIKEY',
'Content-Type': 'application/json',
};
好的,我似乎可以正常工作,需要更改一些内容:
- 如@I-Am-Not-Legend 所述,主机和路径选项都需要正确设置。
- 需要将
anystring
字符串更改为 apikey
完成这两件事后,请求就按预期工作了。完整代码如下,只需确保使用您实际的 API 密钥切换 APIKEY
,并使用您帐户的相应数据中心(位于 [=25= 末尾)切换 us12
]键)。
"use strict";
/* globals require, console */
var http = require('http');
var options = {
host: 'us12.api.mailchimp.com',
path: '/3.0/',
headers: {
'Authorization': 'apikey APIKEY',
'Content-Type': 'application/json',
}
};
http.get(options, (res) => {
console.log(`Got response: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
// consume response body
res.resume();
}).on('uncaughtException', function (err) { console.log(err); });
每当我 运行 以下 curl 代码时,我对 Mailchimp 3.0 API 的请求都会正常进行:
curl --request GET \
--url 'https://us12.api.mailchimp.com/3.0/' \
--user 'anystring:APIKEY'
但是,每当我使用 Node.js 向 API 发出请求时,我都会收到以下错误:
Got error: connect ECONNREFUSED 127.0.0.1:80
我假设我的 .js 文件中遗漏了一些东西或有一些不匹配的东西,关于那可能是什么的任何想法?节点代码如下:
"use strict";
/* globals require, console */
var http = require('http');
var options = {
url: 'https://us12.api.mailchimp.com/3.0/',
headers: {
'Authorization': 'anystring:APIKEY',
'Content-Type': 'application/json',
}
};
http.get(options, (res) => {
console.log(`Got response: ${res.statusCode}`);
// consume response body
res.resume();
}).on('error', (e) => {
console.log(`Got error: ${e.message}`);
});
编辑:使用未捕获的异常returns以下内容:
Error: connect ECONNREFUSED 127.0.0.1:80
at Object.exports._errnoException (util.js:856:11)
at exports._exceptionWithHostPort (util.js:879:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1053:14)
编辑 2:修复了其中的一部分。使用 url
作为我的选项之一,而不是 host
。这是该部分的正确代码:
var options = {
host: 'https://us12.api.mailchimp.com/3.0/',
headers: {
'Authorization': 'anystring:APIKEY',
'Content-Type': 'application/json',
}
};
现在我收到的是回溯 Got response: 400
而不是我要提取的数据。
根据documentation,选项中没有url 属性。 您应该指定主机和路径。
您的选项对象应如下所示。
var options = {
host: 'https://us12.api.mailchimp.com',
path : '/3.0/'
headers: {
'Authorization': 'anystring:APIKEY',
'Content-Type': 'application/json',
};
好的,我似乎可以正常工作,需要更改一些内容:
- 如@I-Am-Not-Legend 所述,主机和路径选项都需要正确设置。
- 需要将
anystring
字符串更改为apikey
完成这两件事后,请求就按预期工作了。完整代码如下,只需确保使用您实际的 API 密钥切换 APIKEY
,并使用您帐户的相应数据中心(位于 [=25= 末尾)切换 us12
]键)。
"use strict";
/* globals require, console */
var http = require('http');
var options = {
host: 'us12.api.mailchimp.com',
path: '/3.0/',
headers: {
'Authorization': 'apikey APIKEY',
'Content-Type': 'application/json',
}
};
http.get(options, (res) => {
console.log(`Got response: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
// consume response body
res.resume();
}).on('uncaughtException', function (err) { console.log(err); });