使用 Google AppEngine Urlfetch 代替 urllib2

Posted

技术标签:

【中文标题】使用 Google AppEngine Urlfetch 代替 urllib2【英文标题】:Using Google AppEngine Urlfetch instead of urllib2 【发布时间】:2012-10-09 22:52:48 【问题描述】:

Google 的 urlfetch 与 python 库 urllib2 有什么区别?

当我遇到 Google 的 urlfetch 时,我想可能是出于安全原因。也许谷歌在恶意网址或其他方面更安全?

有什么理由让我选择 Google 的 urlfetch 而不是 urllib2

【问题讨论】:

【参考方案1】:

在 App Engine 中使用标准库没有问题。 Url Fetch Api 只是一个使 HTTP 请求比 urllib2 更“容易”的服务。它对于 Python 新手来说更不稳定,例如您可以轻松地使用非阻塞请求。

我建议你在这里阅读一些补充信息:https://developers.google.com/appengine/docs/python/urlfetch/overview

如果谷歌在 Python 标准库上发现了一些安全问题。我想它会发送一个修复;)

【讨论】:

【参考方案2】:

我不为 Google 工作,所以这只是我读过的各种 GAE 帖子的猜测。 App Engine 实例并不直接面向互联网,而是隐藏在 Google 基础设施层的后面。当浏览器发出 HTTP 请求时,它不会直接访问您的实例,而是访问 Google 边缘服务器,最终将请求路由到 GAE 实例。

同样,当发出 HTTP 请求时,您的实例不只是打开一个套接字(urllib2 通常会这样做),而是将 HTTP 请求发送到其他发出 HTTP 请求的 Google 边缘服务器。在 GAE 上使用 urllib2 将使用在 urlfetch 之上运行的 GAE 特定版本。

【讨论】:

【参考方案3】:

区别在于:urlfetch只有一个函数接口,而urllib和httplib有一个OO接口。 OO 接口可能非常有用。我在 oauth2 客户端库中看到了一个很好的示例,其中将请求实例传递给客户端库以检查令牌是否有效和授权。

【讨论】:

这确实不是库之间差异的重要部分。【参考方案4】:

请注意,在 GAE urllib 中,urllib2 和 httplib 只是 UrlFetch 的包装器(请参阅 Fetching urls in Python)。

urlfetch 模块的一个不同之处在于它为您提供了一个用于制作Asynchronous requests 的接口。

【讨论】:

以上是关于使用 Google AppEngine Urlfetch 代替 urllib2的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Google 的 appengine 动态生成 pdf?

在 Google AppEngine 中使用 app.yaml

使用 Google AppEngine Urlfetch 代替 urllib2

使用 node.js 标准环境在 AppEngine 上找不到模块 @google-cloud/firestore

Google api - bigquery & Appengine - 无法创建数据集

python 使用google appengine blobstore api上传的Flask示例。