向Tumblr'发出POST请求;Chrome扩展中的API
我正在尝试使用他们的API和chrome_ex_oauth向Tumblr发送一篇文本帖子向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:
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': {
调试
为了找到原因,我遵循以下步骤(注释我的想法):
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); // <-- !!!
};