MailChimp 登录 API "bad request"

MailChimp Login API "bad request"

这类似于以下问题:Mailchimp API login returning "bad request"

我正在重新发布我的结果,因为那个问题的解决方案没有解决我的问题。当我使用我自己生成的 API 密钥时,我的应用程序运行良好,但是当我尝试使用令牌进行验证时,我收到 400 响应,内容如下:

请求错误

您的浏览器发送了该服务器无法理解的请求。

参考#7.c2f0660.1429044353.139e2e94

我正在使用 Node.js 和 Express.js 4.x,验证码如下:

function getLogin(key, id, callback) { console.log('mailchimp 登录');

var currentDomain = 'http://xxxxxxx.com/api/mailchimp/redirect/redirect';
var translatedDomain = encodeURIComponent(currentDomain);
var secret = 'xxxxxxxxxxxx';
var clientId = 'xxxx';

var post_data = {
    grant_type : 'authorization_code',
    client_id : clientId,
    client_secret : secret,
    code : key,
    redirect_uri : translatedDomain
};

var post_options = {
      host: 'login.mailchimp.com',
      path: '/oauth2/token',
      method: 'POST',
      headers: {
          'User-Agent' : 'oauth2-draft-v10',
          'Content-Type': 'application/x-www-form-urlencoded',
          'Accept': 'application/json'
      }
  };

var errors = false;

// Set up the request
var post_req = http.request(post_options, function(res) {
  var str = '';
  res.on('data', function (chunk) {
        str += chunk;

    });

  res.on('error', function (error) {
        console.log("error: " + error.message); 
        errors = true;
  });

  res.on('end', function () {
    console.log(str);
    try {
        var accessToken = JSON.parse(str);
        getEndpoint(accessToken.access_token, callback);
    } catch (error) {
        console.log('error: Error parsing JSON answer from the MailChimp API.');
        console.log(error);
        callback(false);
    }
  });     
});

// post the data
post_req.write(querystring.stringify(post_data));
post_req.end();

}

我能够成功生成代码,但令牌有问题。想法?

你确定你得到的是 400 而不是更具体的东西,比如 411?

我不是 Node.js 专业人士,但通过一些谷歌搜索,似乎在 Node 中,您必须指定要发送的所有 header。具体来说,您的 post 请求中似乎遗漏了 content-length header,这可能会导致服务器出错。查看 these node docs 了解有关 content-length 的更多信息。

如果不是这样,我会非常仔细地查看原始请求(headers 和所有),因为像这样的 4xx 错误表明服务器不理解你正在尝试做什么.