gpt4 book ai didi

javascript - 通过 xmlhttprequest 连接到 API 服务器时出现问题

转载 作者:行者123 更新时间:2023-12-02 19:04:21 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 Pocket Web 应用程序将连接到其 API 并首先进行身份验证,然后检索经过身份验证的用户的书签。不幸的是,我正在使用连接到他们的服务,因为我在这个领域真的缺乏经验。

我在文档身份验证过程的第 2 步(获取请求 token )失败。

到目前为止我得到的是:

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 个选项:

  1. application/x-www-form-urlencoded(默认)
  2. 应用程序/json

这是我收到的错误:

XMLHttpRequest cannot load https://getpocket.com/v3/oauth/request. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

pocket v3 API

编辑

我刚刚尝试创建 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

我上传了现场演示here ,我猜调试会更容易

最佳答案

我看到几个问题:

首先,XMLHttpRequest 受到同源限制,因此这是您因同源原因而拒绝访问的主要原因。您需要执行实际的表单发布,而不是 XMLHttpRequest。请参阅此处的解释:Why is $.post() subject to same-origin policy, but submitting a form with method='POST' okay?

其次,根据我在这里看到的 Pocket 文档 http://getpocket.com/developer/docs/authentication ,您需要发送 redirect_uri 参数,而不是第 2 步中的 request_uri 参数,并且它需要是返回到您的应用的完整 URL,而不是相对 URI。

关于javascript - 通过 xmlhttprequest 连接到 API 服务器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14471676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com