もともと、クライアント側からサードパーティの URL に ajax リクエストを投稿しようとしたのですが、ブラウザにセキュリティ上の問題があるようです。サーバー側に ajax を送信し、そこからサードパーティに GET リクエストを送信し、応答を取得してクライアント側に送り返すことを考えました。どうすればフラスコでそれを行うことができますか?
3 に答える
モジュールをインストールしてrequests
( を使用するよりもはるかに優れてurllib2
います)、必要なリクエストを行うルートを定義します。次のようなものです。
import requests
from flask import Flask
app = Flask(__name__)
@app.route('/some-url')
def get_data():
return requests.get('http://example.com').content
ただし、設定によっては、特定の URL でターゲット サイトにリバース プロキシするように Web サーバーを構成することをお勧めします。
Flask だけではこの機能はありませんが、HTTP クライアント ライブラリを使用して別のサーバーにリクエストを送信し、そのレスポンスを返すリクエスト ハンドラーを作成するのは簡単なことです。
# third-party HTTP client library
import requests
# assume that "app" below is your flask app, and that
# "Response" is imported from flask.
@app.route("/proxy-example")
def proxy_example():
r = requests.get("http://example.com/other-endpoint")
return Response(
r.text
status=r.status_code,
content_type=r.headers['content-type'],
)
ただし、これは、クライアント側の要求から期待されるものとまったく同じ結果にはなりません。サーバーは、クライアント ブラウザがターゲット サイト用に保存した Cookie を「見る」ことができないため、プロキシされたリクエストは実質的に匿名になり、ターゲット サイトによっては、失敗するか、リクエストとは異なる応答が返される場合があります。ブラウザでそのリソース。
サードパーティの URL と関係がある場合 (つまり、それを管理している場合、または管理している人々と協力できる場合)、彼らはCORSを使用してブラウザーでクロスドメイン要求へのアクセスを許可できます(これは、最新のブラウザー) またはJSON-P (CORS より前の古い回避策)。
サードパーティ プロバイダーは、他のサーバーからの要求を受け入れるように設計され、アプリを認証するためのメカニズムを提供するエンドポイントで必要なデータへのアクセスをユーザーに提供することもできます。このための最も一般的なプロトコルはOAuthです。