【问题标题】:AppEnginePlatformWarning - reason to use sockets?AppEnginePlatformWarning - 使用套接字的原因?
【发布时间】:2017-11-26 07:27:45
【问题描述】:

在 Google App Engine 标准环境中,如果您使用 urllib 发出 HTTPS 请求,您将收到一个 AppEnginePlatformWarning,它表示您使用的是 urlfetch 而不是套接字。

我觉得这个警告很烦人,所以我禁用了它。

# Use the App Engine Requests adapter. This makes sure that Requests uses
# URLFetch.
requests_toolbelt.adapters.appengine.monkeypatch()

# squelch warning
requests.packages.urllib3.disable_warnings(
    requests.packages.urllib3.contrib.appengine.AppEnginePlatformWarning
)

我的问题是 - 是否有充分的理由切换到套接字?具体使用 urlfetch 有什么问题?

【问题讨论】:

    标签: python sockets google-app-engine python-requests


    【解决方案1】:

    使用urlfetch 没有任何问题,实际上它是在GAE 上发出出站HTTP(S) 请求的推荐方法。来自Issuing HTTP(S) Requests(重点是requests相关的笔记我的):

    App Engine 使用 URL Fetch 服务发出出站 HTTP(S) 请求。

    有关如何实现 URL Fetch 服务以及哪些服务的详细信息 标头在 URL Fetch 请求中发送,请参阅 Outbound Requests

    发出 HTTP 请求

    要发出出站 HTTP 请求,请使用 urlfetch.fetch 方法。为了提高代码的可移植性,您还可以使用 Python 标准库 urlliburllib2httplib 发出 HTTP 要求。当您在 App Engine 中使用这些库时,它们会执行 使用 App Engine 的 URL Fetch 服务的 HTTP 请求。 您也可以使用 第三方requests库,只要你配置它使用 URLFetch。

    套接字支持在 GAE 中相当有问题,它带有相当长的限制和限制列表,请参阅 Sockets Python API Overview,尤其是 Limitations and restrictions 部分。

    您看到的警告不是来自 GAE,而是来自您使用的第 3 方 requests 库,这就是我在上面引用中突出显示注释的原因。恕我直言,在 GAE 上下文中简单地忽略/掩盖警告是安全的。

    【讨论】:

    • 警告是针对 App Engine 明确发出的,这令人困惑。它实际上来自 urllib3,而不是请求。请求只是将其打包在自身中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多