Google Appengine:请求替代

Google Appengine: Requests Alternative

我有一个非 GAE application/request-handler,它使用 Python 请求模块 post 通过 POST 请求上传的二进制图像:

headers = {"MyAuth" : "xyz"}
r = requests.post(base_uri, data=open('0.jpg')), headers=headers)

用户上传一张图片,上传的图片保存在本地,打开阅读,然后通过post请求发送到远程分类器管道——这returns一些JSON关于图像特征,然后可以将其返回给用户。

我需要在 GAE 应用程序中实现此行为,但知道 GAE 没有传统的文件系统,所以我将不得不使用 StringIO:

data = ... #some jpg => str
headers = {"MyAuth" : "xyz"}
r = requests.post(base_uri, data=StringIO.StringIO(data), headers=headers)

如何以 GAE 友好的方式完全替换此示例中的请求模块?

非常感谢。

在 App Engine 上发出 HTTP 请求的常用模块是 urlfetch,它在默认运行时通过 google.appengine.api.urlfetch 可用。据说 urllib2 and/or urllib3 也是选项,但我自己没有用过,所以我不能肯定。

您也可以 install requests 在您的应用程序引擎目录中并将其与项目一起上传,但我发现这有点麻烦,因为 requests 有自己的依赖项,您也需要将其包含在内。

另见 Using the Requests python library in Google App Engine

虽然可能不是这个问题的最佳解决方案,但我设法让请求 2.3.0 在 GAE 项目中工作:

pip install --target myproject/externals/ requests==2.3.0

我现在可以像往常一样使用请求了。