如何从我的烧瓶应用程序向另一个站点发送GET请求?

use*_*431 41 python ajax flask

最初,我试图从我的客户端向第三方网址发布ajax请求,但似乎浏览器存在安全问题.我想到将ajax发送到服务器端,从那里向第三方发送GET请求,得到响应并将其发送回客户端.我怎么能用烧瓶做到这一点?

Jon*_*nts 59

安装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
Run Code Online (Sandbox Code Playgroud)

根据您的设置,最好将您的网络服务器配置为在特定URL下反向代理到目标网站.


Mar*_*ins 10

单独的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'],
    )
Run Code Online (Sandbox Code Playgroud)

但是,这不会达到与客户端请求所期望的完全相同的结果.由于您的服务器无法"看到"客户端浏览器为目标站点存储的任何cookie,因此您的代理请求将实际上是匿名的,因此,根据目标站点,可能会失败或者给出与您请求的响应不同的响应浏览器中的那个资源.

如果您与第三方URL有关系(即,如果您控制它或能够与那些人合作),他们可以使用CORS在浏览器中为跨域请求提供访问权限(仅在现代浏览器)或JSON-P(早于CORS的旧解决方案).

第三方提供商还可以让您在端点上访问所需的数据,该端点旨在接受来自其他服务器的请求,并为您提供验证应用程序身份的机制.最受欢迎的协议是OAuth.