0

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つのオプションしか言及していません:

  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.

ポケット 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

ここにライブデモをアップロードしました。デバッグが簡単だと思います

4

1 に答える 1

2

いくつかの問題があります。

まず、XMLHttpRequest は同じオリジンの制限を受けるため、同じオリジンの理由でアクセスが拒否される主な理由です。XMLHttpRequest ではなく、実際のフォーム投稿を行う必要があります。説明については、こちらをご覧ください

次に、http: //getpocket.com/developer/docs/authenticationにある Pocket のドキュメントに従って、ステップ 2redirect_uriのパラメーターではなくパラメーターを送信する必要がありrequest_uri、アプリに完全な URL を返す必要があります。相対 URI ではありません。

于 2013-01-23T04:25:28.553 に答える