APIに接続し、最初に認証してから、認証されたユーザーのブックマークを取得する単純なPocket Webアプリケーションを作成しようとしています。残念ながら、私はこの分野で本当に経験が浅いので、彼らのサービスへの接続を使用しています。
リクエスト トークンを取得するドキュメントの認証プロセスのステップ 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つのオプションしか言及していません:
- application/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
ここにライブデモをアップロードしました。デバッグが簡単だと思います