Mailchimp API v3.0通过NodeJS http将电子邮件添加到列表中

the*_*tus 8 http node.js mailchimp mailchimp-api-v3.0

我正在使用NodeJS来调用新的MailChimp 3.0 API,以便将电子邮件添加到列表中.虽然我可以通过POSTman让它工作,但我很难使用Node的http:

var http = require('http');

var subscriber = JSON.stringify({
    "email_address": "test@test.com", 
    "status": "subscribed", 
    "merge_fields": {
        "FNAME": "Tester",
        "LNAME": "Testerson"
    }
});

var options = {
    host: 'https://us11.api.mailchimp.com',
    path: '/3.0/lists/<myListID>/members',
    method: 'POST',
    headers: {
        'Authorization': 'randomUser myApiKey',
        'Content-Type': 'application/json',
        'Content-Length': subscriber.length
    }
}

var hreq = http.request(options, function (hres) {  
    console.log('STATUS CODE: ' + hres.statusCode);
    console.log('HEADERS: ' + JSON.stringify(hres.headers));
    hres.setEncoding('utf8');

    hres.on('data', function (chunk) {
            console.log('\n\n===========CHUNK===============')
            console.log(chunk);
            res.send(chunk);
    });

    hres.on('end', function(res) {
            console.log('\n\n=========RESPONSE END===============');
    });

    hres.on('error', function (e) {
            console.log('ERROR: ' + e.message);
    }); 
});

hreq.write(subscriber);
hreq.end();
Run Code Online (Sandbox Code Playgroud)

但是,我没有从Mailchimp获得某种JSON错误,而是获得HTML:400 Bad Request

400错误请求


nginx的

是否明白我在这里做错了什么?看起来很简单,但我尝试过的任何东西似乎都没有用.

一些额外的想法:

  1. 虽然http的选项具有"auth"属性,但我使用标题来确保在没有编码的情况下发送授权(如此处所述).尽管如此,我还尝试了"auth"属性,并得到了相同的结果.
  2. 我实际上是 ExpressJS API 内部进行此调用(我的客户端调用Express API,调用上面的代码 - 为了简单起见,我已经编辑了本示例中的所有内容).这就是为什么我的变量是"hres"和"hreq",以区别于Express中的"res"和"req".有什么理由可以成为问题吗?
  3. 如上所述,我在使用POSTman 能够获得成功的结果,所以我至少知道我的主机,路径,列表ID和API密钥是正确的.

the*_*tus 5

事实证明,这有一个非常简单的解决方案:选项对象的“主机”属性需要域名。IE,删除“https://”协议:

var options = {
    host: 'us11.api.mailchimp.com',
    path: '/3.0/lists/<myListID>/members',
    method: 'POST',
    headers: {
        'Authorization': 'randomUser myApiKey',
        'Content-Type': 'application/json',
        'Content-Length': subscriber.length
    }
}
Run Code Online (Sandbox Code Playgroud)