如何从烧瓶中调用另一个 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?

如何在不使用请求的情况下直接从代码调用烧瓶端点

如何从另一个应用程序调用我的基于角色的授权 Web API?

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

前端 ASP.NET MVC4 作为一个项目,ASP.NET Web API 作为同一解决方案中的另一个项目 - 如何从前端调用 WebAPI?

如何从 JavaScript 调用 REST Web 服务 API?