GoogleCloudPlatform / go-endpoints

Cloud Endpoints for Go
https://go-endpoints.appspot.com
Apache License 2.0
255 stars 56 forks source link

Support x-www-form-urlencoded data in POST methods #144

Closed RockoDev closed 6 years ago

RockoDev commented 8 years ago

If I send some data to a endpoint via POST method it needs to be in JSON format, if I send it in x-www-form-urlencoded format it fails and return error 500.

OK:

$ curl -H "Content-Type: application/json; charset=utf-8" -X POST -d '{"foo":"bar"}' http://localhost:8080/_ah/api/example/v1/endpoint

Fails:

$ curl -H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" -X POST -d 'foo=bar' http://localhost:8080/_ah/api/example/v1/endpoint

Logs:

ValueError('No JSON object could be decoded',)
Traceback (most recent call last):
  File ".../appengine-go-sdk-1.9.35/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 1302, in communicate
    req.respond()
  File ".../appengine-go-sdk-1.9.35/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 831, in respond
    self.server.gateway(self).respond()
  File ".../appengine-go-sdk-1.9.35/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 2117, in respond
    for chunk in response:
  File ".../appengine-go-sdk-1.9.35/google/appengine/tools/devappserver2/endpoints/endpoints_server.py", line 117, in __call__
    request = api_request.ApiRequest(environ)
  File ".../appengine-go-sdk-1.9.35/google/appengine/tools/devappserver2/endpoints/api_request.py", line 75, in __init__
    self.body_json = json.loads(self.body) if self.body else {}
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded