torrange
torrange

Reputation: 81

Google Appengine: Requests Alternative

I have a non-GAE application/request-handler that uses the Python requests module in a to post an uploaded imaged via a POST request, as binary:

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

The user uploads an image, the uploaded image is saved locally, opened for reading, then sent to a remote classifier pipeline via post request - this returns some JSON regarding the image features, which can then be returned to the user.

I need to implement this behaviour in a GAE app, but know that GAE has no traditional file system, so I will have to use StringIO:

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

How could I completely replace the requests module in this example in a GAE friendly way?

Many thanks.

Upvotes: 0

Views: 411

Answers (2)

torrange
torrange

Reputation: 81

Although probably not the best solution to this problem, I managed to get requests 2.3.0 to work in the GAE project with:

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

I can now use requests as I would normally.

Upvotes: 0

Tim
Tim

Reputation: 43314

Commonly used module for making HTTP requests on app engine is urlfetch, it is available in the default runtime via google.appengine.api.urlfetch. Supposedly urllib2 and/or urllib3 are also options, but I have not used those myself so I can't say for sure.

You can also install requests in your app engine directory and upload it with the project, but I find that a bit of a hassle, since requests has its own dependencies that you will need to include as well.

Also see Using the Requests python library in Google App Engine

Upvotes: 1

Related Questions