如何在Flask中调用另一个web服务API

16 投票
1 回答
57603 浏览
提问于 2025-04-18 16:09

我在我的Flask服务器中使用重定向来调用另一个网络服务的API,比如说:

@app.route('/hello')
def hello():
    return redirect("http://google.com")

虽然网址在逻辑上变成了google.com,但有没有办法让我保持相同的网址?或者有没有其他方法可以进行网络服务的调用?

1 个回答

29

你需要向服务器“请求”数据,然后再发送它。

你可以使用Python自带的库函数(比如urllib等),不过这样做会比较麻烦,所以很多人选择使用“requests”这个库。你可以通过运行 pip install requests 来安装它。

http://docs.python-requests.org/en/latest/

这样你最终得到的代码可能会像下面这样:

@app.route('/hello')
def hello():
    r = requests.get('http://www.google.com')
    return r.text

如果你因为某种原因无法安装 requests,那么可以用Python自带的库来实现,具体方法可以参考这个链接:标准库(Python 3):

from urllib.request import urlopen 

@app.route('/hello')
def hello():
    with urlopen('http://www.google.com') as r:
        text = r.read()
    return text

使用自带库的版本意味着你会用到自带的SSL(https)安全证书,这在某些情况下可能会出现问题(例如,有时候在macOS上会遇到这样的情况:SSL证书验证失败)。

所以我真的推荐使用 requests 模块。

撰写回答