如何在Flask中调用另一个web服务API
我在我的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
模块。