Google Appengine:请求替代方案

时间:2016-06-01 11:14:17

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

我有一个非GAE应用程序/请求处理程序,它使用a中的Python请求模块通过POST请求发布上传的图像,作为二进制文件:

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

用户上传图像,上传的图像保存在本地,打开阅读,然后通过发布请求发送到远程分类器管道 - 这将返回一些关于图像功能的JSON,然后可以返回给用户。 / p>

我需要在GAE应用中实现此行为,但是知道GAE没有传统的文件系统,所以我必须使用StringIO

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

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

非常感谢。

2 个答案:

答案 0 :(得分:1)

用于在app引擎上发出HTTP请求的常用模块是urlfetch,它可以通过google.appengine.api.urlfetch在默认运行时中使用。据说urllib2和/或urllib3也是选项,但我自己没有使用过,所以我不能肯定地说。

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

另见Using the Requests python library in Google App Engine

答案 1 :(得分:0)

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

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

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