向Tumblr'发出POST请求;Chrome扩展中的API

向Tumblr'发出POST请求;Chrome扩展中的API,post,oauth,google-chrome-extension,tumblr,Post,Oauth,Google Chrome Extension,Tumblr,我正在尝试使用他们的API和chrome_ex_oauth向Tumblr发送一篇文本帖子 API: chrome_ex_oauth: 获得授权作品的整个过程。我不能去工作的是做一个职位。我正在做以下工作: 编辑:我已经更新了代码,以反映Rob W关于body字段的正确建议 var stringify = function (parameters) { var params = []; for(var p in parameters) { params.push(encodeU

我正在尝试使用他们的API和chrome_ex_oauth向Tumblr发送一篇文本帖子

  • API:
  • chrome_ex_oauth:
获得授权作品的整个过程。我不能去工作的是做一个职位。我正在做以下工作:

编辑:我已经更新了代码,以反映Rob W关于body字段的正确建议

var stringify = function (parameters) {
  var params = [];
  for(var p in parameters) {
    params.push(encodeURIComponent(p) + '=' +
                encodeURIComponent(parameters[p]));
  }
  return params.join('&');
};

var onAuthorized = function() {
  var url = 'http://api.tumblr.com/v2/blog/jindie.tumblr.com/post';
  var request = {
    'method': 'POST',
    'headers':{
      'Content-Type':'application/x-www-form-urlencoded'
    },
    'body': stringify({
      'type': 'text',
      'state': 'draft',
      'title': 'Test post...',
      'body': 'Hello, World!'
    })
  };

  oauth.sendSignedRequest(url, function(responseText, xhr){alert(responseText);}, request);
};

oauth.authorize(onAuthorized);
我一直在检查代码,并思考可能出现的错误,但我真的不知道。你知道吗


你知道我哪里出错了吗?

当文档无法帮助您查看源代码时

您必须使用
'body'
而不是
'parameters'

var request = {
  'method': 'POST',
  'body': {
调试 为了找到原因,我遵循以下步骤(注释我的想法):

  • 显然,帖子的主体是空的。因此,API的实现肯定是错误的
  • Ctrl+F
    sendSignedRequest

    ChromeExOAuth.prototype.sendSignedRequest = function(url, callback, opt_params) { var method = opt_params && opt_params['method'] || 'GET'; var body = opt_params && opt_params['body'] || null; var params = opt_params && opt_params['parameters'] || {}; var headers = opt_params && opt_params['headers'] || {};
    var signedUrl = this.signURL(url, method, params);
    // Hmm...? Where is `params` being passed...? ChromeExOAuth.sendRequest(method, signedUrl, headers, body, function (xhr) { if (xhr.readyState == 4) { callback(xhr.responseText, xhr); } }); };
  • 明白了必须使用
    正文
    而不是
    参数
  • body
    变量回溯到
    请求['body']
    (请参见2)

  • 很好,你花时间记下你是如何得出结论的。非常详细的回答。非常感谢。然而,从“参数”到“身体”的改变似乎也不起作用。我仍然收到相同的错误响应。@Sparragus您是否已经尝试添加
    内容长度
    标题?该值必须等于正文的大小。我刚刚添加了
    内容长度
    ,并开始得到一个不同的错误:
    {“meta”:{“status”:401,“msg”:“notauthorized”},“response”:[]}
    我允许我在Tumblr上应用程序(使用oauth过程)。我将仔细检查我的密钥并调试发生这种情况的原因。@RobW我刚刚注意到这个错误:
    拒绝设置不安全的标题“Content Length”
    似乎是安全的。 ChromeExOAuth.sendRequest = function(method, url, headers, body, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(data) { callback(xhr, data); } xhr.open(method, url, true); if (headers) { . . . } xhr.send(body); // <-- !!! };