AppEnginePlatformWarning - 使用套接字的原因吗?

时间:2017-11-26 07:27:45

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

在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有什么问题?

1 个答案:

答案 0 :(得分:2)

使用urlfetch并没有错,实际上它是在GAE上发出出站HTTP(S)请求的推荐方法。来自Issuing HTTP(S) Requests(强调requests - 相关说明我的):

  

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

     

有关如何实施URL提取服务以及具体方法的详细信息   标头在网址提取请求中发送,请参阅Outbound Requests

     

发出HTTP请求

     

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

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

您看到的警告不是来自GAE,而是来自您使用的第三方requests库,这就是我在上面的引文中突出显示注释的原因。恕我直言,在GAE环境中忽略/屏蔽警告是安全的。