Python Extracting binary from a POST request using web.py

。_饼干妹妹 提交于 2019-12-24 19:19:02

问题


I am developing an API that allows outside clients to send a binary file which will be processed. my web.data() is a string and the function I am calling requires a binary. How do I get it into the correct format? Maybe I have the incorrect Headers? how do I extract the binary data. I am using web.py.

-----------------POST request----------------------------------------------------

import json
import requests



files = {'file':('000038fe4b46c210c37bdde767835007', open('000038fe4b46c210c37bdde767835007', 'rb'))}
headers = {'content-type' : 'application/octet-stream',  'X-Auth-Token':'xxxf'}
r = requests.post('http://XXX:8080/v1/binaries', files = files, headers = header

-----------------------API function------------------------------

  def POST(self):
                a = web.ctx.env.get("HTTP_X_AUTH_TOKEN", None)
                creds = authenticator(a)
                postdata = web.data().read()
                analysis = atklite.FileAnalysis(data=postdata)
                metadata = analysis.return_analysis()

------------------------Traceback--------------------------------

  File "/usr/lib/pymodules/python2.7/web/application.py", line 242, in process
    return self.handle()
  File "/usr/lib/pymodules/python2.7/web/application.py", line 233, in handle
    return self._delegate(fn, self.fvars, args)
  File "/usr/lib/pymodules/python2.7/web/application.py", line 415, in _delegate
    return handle_class(cls)
  File "/usr/lib/pymodules/python2.7/web/application.py", line 390, in handle_class
    return tocall(*args)
  File "/home/XXXXXX/ProcessingCode/bfsapi.py", line 75, in POST
    postdata = web.data().read()
AttributeError: 'str' object has no attribute 'read'

Thanks

Sorry if the formatting got all messed up in the Post.


回答1:


Even if it is a binary file, reading raw post data would get you a encoded string. You would need to decode to convert to binary data. You can write to a file as follows:

 written = open('binary.file', 'wb')
 for chunk in rawdata.chunks():
        written.write(chunk)
 written.close()


来源:https://stackoverflow.com/questions/11137946/python-extracting-binary-from-a-post-request-using-web-py

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!