我正在尝试创建一个简单的Pocket Web 应用程序,该应用程序将连接到他们的 API 并首先进行身份验证,然后检索经过身份验证的用户的书签。不幸的是,我正在使用连接到他们的服务,因为我在这个领域真的没有经验。
我在获取请求令牌的文档身份验证过程的第 2 步失败。
到目前为止我得到的是:
var url = "https://getpocket.com/v3/oauth/request";
var data = "consumer_key=censored&request_uri=foo.bar/success";
function post(url, data, parameters){
var request;
try{
request = new XMLHttpRequest();
}catch(e){
request = false;
}
if(request !== false){
request.open("POST", url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// request.setRequestHeader("Access-Control-Allow-Origin", "*");
request.send(data);
request.onreadystatechange = function(){
console.log(request.responseText);
};
}else{
console.log("Couldn't create a new XmlHttpRequest Object");
}
}
post(url, data);
我知道现代浏览器会阻止跨域请求,但我不确定如何在不使用代理的情况下修复它。该文档没有提及任何内容(或者确实提及但我不明白如何)。我知道通过 JSONP 我可以解决这个问题,但我不确定如何判断他们的 API 是否支持(或如何实现它)。他们只提到 2 个选项:
- 应用程序/x-www-form-urlencoded(默认)
- 应用程序/json
这是我得到的错误:
XMLHttpRequest cannot load https://getpocket.com/v3/oauth/request. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
编辑
我刚刚完成了创建 json 版本的尝试,以查看这个版本是否有效,但似乎我做错了什么(再次)。
var url = "https://getpocket.com/v3/oauth/request";
var data = {};
data.comsumer_key = "censored";
data.request_uri = "foo.bar/success";
function post(url, data, parameters){
var request;
try{
request = new XMLHttpRequest();
}catch(e){
request = false;
}
if(request !== false){
request.open("POST", url, true);
request.setRequestHeader("Content-type", "application/json");
request.setRequestHeader("X-Accept", "application/json");
request.setRequestHeader("Access-Control-Allow-Origin", "*");
request.send(JSON.stringify(data));
request.onreadystatechange = function(){
console.log(request.responseText);
};
}else{
console.log("Couldn't create a new XmlHttpRequest Object");
}
}
post(url, data);
编辑编号 2
我在这里上传了一个现场演示,我想调试起来会更容易