0

Flickr API にアクセスするための OAUTH を実装しようとしています。flickr.com への AJAX 呼び出しが失敗し続けます。

サンプル エラー メッセージ:

XMLHttpRequest cannot load http://www.flickr.com/services/oauth        /request_token?oauth_callback=oob&oauth…signature_method=HMAC-SHA1&oauth_timestamp=1368375405647&oauth_version=1.0. Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin. 

最初はクロムを使用し、html ファイルを file://path. 以前は、「access-control-allow-origin では null は許可されていません」というエラーが発生していました。HTMLファイルを「ローカルIISサーバー」、「ローカルPython Webサーバー」、「リモートWebサーバー」にコピーすることで、この問題を解決しました。> python -m http.server 8080' を使用して python Web サーバーを作成しました

XMLHttpRequest を使用した flickr.com へのクロス ブラウザー呼び出しが失敗していることに気付きました。このフォーラムで提案されたさまざまな解決策を試しました:

  1. CORSをサポートしていると思われる新しいChrome 26.0.1410.64 mを使用
  2. --disable-web-security で chrome を起動しました
  3. ローカル マシンで python -m http.server 8080 を使用して Web サーバーを作成し、次にリモート マシンで html ファイルをサイトにコピーしました。
  4. ファイルをローカルの MSFT IIS サーバーにコピーしました
  5. 数値の IP を避けるために、etc/hosts ファイルに URL を定義しました

それでも同じエラーが発生します (エラー メッセージに関連する URL が含まれています)。

コードクリッピング:

urlString="http://www.flickr.com/services/oauth/request_token?"+
        "oauth_callback="+"oob"+'&'+
        "oauth_consumer_key="+consumerKey+'&'+
        "oauth_nonce="+nonce+'&'+
        "oauth_signature="+esignature+'&'+
    "oauth_signature_method="+macAlgorithm+'&'+
        "oauth_timestamp="+timeStamp+'&'+
        "oauth_version=1.0";


$.ajax({
   url: urlString,
   success:function(data){
    alert(data);
  }
});
4

2 に答える 2

1

CORS が機能するには、両端で CORSを有効にする必要があります。

最初の端はbrowserで、Chrome 26.* を使用しているので、あなたのものは問題ありません。

2 番目の端はサーバーです。

GETページが存在するドメインとは異なるドメインにリクエストを送信する前に、ブラウザOPTIONSはそのドメインにリクエストを送信します。このリクエストに応答して、サーバーはクロスドメイン リクエスト ( 、またはその他) が許可されているかどうかを示すいくつかのヘッダーを含める必要があります。GETPOST

それらのヘッダーの 1 つがAccess-Control-Allow-Origin.

file://したがって、ファイル システム ( 「プロトコル」)からページを実行すると、「Flickr、クロスドメイン呼び出しを行うことができますか? I'm call from OPTIONSのような意味になります。Flickr はそのドメインを許可されていると認識せず、取得しているエラーを返します。null

同様に、ローカル サーバーからページを実行すると、 「(...) I'm calling fromOPTIONS表示されます。Flickr は、そのドメインも許可されていると認識しません。localhost:8080

ソリューション:

Flickr の oauth サービスについては知りませんが、他のサービスと同様に、CORS 呼び出しを行うには、そのページが許可されたドメイン内にある必要があることは知っています。あなたのテストから、Flickr は他の多くのドメインを許可していないと推測しています。

しかし... CORSの代替はJSONPです。少し調べてみたところ、Flickr の oauth がサポートしているようです。

詳細については、このページを確認してください: http://www.flickr.com/services/api/explore/flickr.auth.oauth.getAccessToken その特定の主題について話している別の質問があります: JSONP は新しい Flickr OAuth API でサポートされていますか?

JSONPについては、これで始めることができます: How to make a JSONP request from Javascript without JQuery?

于 2013-05-12T17:35:50.167 に答える