【问题标题】:Why import urlfetch from Google App Engines?为什么要从 Google App Engines 导入 urlfetch?
【发布时间】:2009-12-12 10:38:04
【问题描述】:

Here in Google App Engines我得到了这个代码,它可以帮助通过 URL 获取任何网页的 HTML 代码:

from google.appengine.api import urlfetch
url = "http://www.google.com/"
result = urlfetch.fetch(url)
if result.status_code == 200:
doSomethingWithResult(result.content)

我不明白这里的一件事(实际上是许多其他事情)为什么在这段代码中建议从 google.appengine.api 导入 urlfecth ? Python 本身没有这个命令吗?

【问题讨论】:

    标签: python google-app-engine import urlfetch


    【解决方案1】:

    Python 有 urllib 和 httplib 等库用于获取 URL,但在 App Engine 上,所有请求都必须通过自定义 urlfetch 库。 App Engine 包含 urllib 和 httplib 的存根,它们会导致它们在内部使用 urlfetch,但如果您可以选择,直接使用 urlfetch 会更高效和灵活。

    【讨论】:

    • 谢谢你,尼克,这个解释。
    • 来源?是不是因为安全原因,他们不允许你在不使用 URL Fetch 的情况下进行网络调用?
    • @irwinb 资料来源:我在 App Engine 团队工作了 4 年多。原因是不受限制的套接字访问的安全隐患,以及在不直接与外界通信的计算机上运行的应用程序所带来的实际问题。
    【解决方案2】:

    google.appengine.api 是一个包含 Google 版本的 urlfetch 类的库。引用from the manual

    网址提取服务使用 Google 的 提高效率的网络基础设施 和缩放目的。

    Python 在其标准库中也有 url 检索类,但那些无法使用 App Engine 中可用的基础设施的人。

    简而言之,google.appengine.api urlfetch 功能更强大,但您使用 Python 自己的 urllib 也没有任何障碍,我在上面链接的手册页中也对此进行了描述。

    【讨论】:

    • 感谢您的解释和链接
    • 如果您在 appengine 上使用 httplib 或 urllib,它也会使用 google 的网络基础设施。 iirc 它们被添加为 urlfetch 的包装器,并且应该或多或少地表现为它们的 python stdlib 表亲:)
    • tosh 提出了一个非常有效的观点。如果标准 python url 也使用相同的基础设施,我认为使用 url fetch 没有任何意义,因为当你想退出 GAE 时,它会降低应用程序的可移植性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2015-04-10
    • 2013-09-18
    相关资源
    最近更新 更多