如何从烧瓶中调用另一个 web 服务 api
Posted
技术标签:
【中文标题】如何从烧瓶中调用另一个 web 服务 api【英文标题】:how to call another webservice api from flask 【发布时间】:2014-09-28 17:53:42 【问题描述】:我在我的烧瓶服务器中使用重定向来调用另一个 web 服务 api.e.g
@app.route('/hello')
def hello():
return redirect("http://google.com")
网址在逻辑上更改为 google.com,但有什么方法可以让我保持相同的网址? 或任何其他方式来获得网络服务调用。
【问题讨论】:
【参考方案1】:您需要向服务器“请求”数据,然后发送。
你可以使用 python stdlib 函数(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
,无论出于何种原因,以下是使用standard library(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
使用 stdlib 版本意味着您最终会使用 stdlib SSL (https) 安全证书,这在某些情况下可能会成为问题(例如on macOS sometimes)
我真的推荐使用requests
模块。
【讨论】:
成功了。谢谢。还有其他方法可以做这些吗? @user3089927:你所说的“做事”是什么意思? 抱歉,只是想知道是否还有其他方法可以解决此问题? 您可以使用subprocess.check_output(['curl','http://www.google.com'])
,它适用于*NIX 机器。您可以在您的 html <iframe src="http://www.google.com" />
类型的东西中放置一个 iframe(尽管这是作弊)。您可以在 javascript (developer.chrome.com/extensions/xhr) 中使用跨域 XHR 请求,您可以在 JS 中使用任何其他跨域解决方案:jquery-howto.blogspot.co.uk/2013/09/…, ...
我注意到一件事,你正在返回 r.text 所以它不会呈现完整的页面,除了上面的文本。另外,我看到 google.com 页面,但它就像 google.com 的本地副本,因此无法使用该页面。如果在文本框中输入任何内容,则会引发 404 错误。以上是关于如何从烧瓶中调用另一个 web 服务 api的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个应用程序调用我的基于角色的授权 Web API?
前端 ASP.NET MVC4 作为一个项目,ASP.NET Web API 作为同一解决方案中的另一个项目 - 如何从前端调用 WebAPI?