JSON decode error with simple_request.py
kraigrs opened this issue · 7 comments
I'm having some trouble using requests
to programatically call the REST API. Submitting the request via cURL works without issues, but when I attempt to run the same image through simple_request.py, I receive the following error:
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-19-0c3919566f71>", line 1, in <module>
r = requests.post(KERAS_REST_API_URL, files=payload).json()
File "C:\ProgramData\Anaconda3\lib\site-packages\requests\models.py", line 885, in json
return complexjson.loads(self.text, **kwargs)
File "C:\ProgramData\Anaconda3\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\ProgramData\Anaconda3\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\ProgramData\Anaconda3\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
When I run the script without .json()
at the end of the request, it returns a very strange HTML response that I can't make heads or tails of.
I am on a Windows 10 machine (corporate environment), Python 3.6.1, Keras v2.0.8, TensorFlow v1.3.0, requests v2.14.2
Any help with this would be greatly appreciated!
It looks like there may be a problem decoding the image. I'm not sure what may be causing that problem but you'll likely want to ensure the image can be loaded via Keras' load_img
function locally. If it can be loaded locally, then there is an encoding/decoding issue that you may need to debug further.
load_img
works as expected (which is what I was afraid of), still very peculiar that it runs fine from cURL but not using requests
.
I'll get back to debugging and let you know what, if anything, works.
Hm, unfortunately I'm not sure what the issue may be then. I have two other tutorials on building a Keras API available here:
- https://www.pyimagesearch.com/2018/01/29/scalable-keras-deep-learning-rest-api/
- https://www.pyimagesearch.com/2018/02/05/deep-learning-production-keras-redis-flask-apache/
My only guess is that it could be related to C-contiguous ordering, but outside of that, I'm unfortunately not sure what the root cause is. Sorry I couldn't be of more help here!
I figured out the issue. Because of certain web services we were accessing that wouldn't allow a proxy to be specified, I edited the requests
library to use our corporate proxies by default. When I turned this off, it magically worked, so going through our proxy seemed to be messing up the encoding/decoding for the image being posted. I would call this resolved, thank you for creating these resources!
Awesome, congrats on resolving the issue Kraig!
@kraigrs could you say how exactly you fixed the problem?
Thanks
@hasibzunair I had originally edited the source code in the requests
library to reflect corporate proxy rules, and when I returned them to their default, it worked. If you haven't made such changes to requests
, I don't suspect that would be the problem.