在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有什么问题?
答案 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的标准库urllib
,urllib2
或httplib
要求。在App Engine中使用这些库时,它们会执行 使用App Engine的URL提取服务的HTTP请求。 您也可以使用 第三方requests
库,只要您将其配置为使用即可 的URLFetch 强>
套接字支持在GAE中是一个有问题的,它带有相当长的限制和限制列表,请参阅Sockets Python API Overview,特别是Limitations and restrictions部分。
您看到的警告不是来自GAE,而是来自您使用的第三方requests
库,这就是我在上面的引文中突出显示注释的原因。恕我直言,在GAE环境中忽略/屏蔽警告是安全的。