本文介绍了Python:使用图像文件发布请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一台服务器,并且我正在尝试建立一个发布请求以取回数据.我认为实现此目的的一种方法是在标头中添加参数并发出请求.但是我得到的错误很少,我不太了解,无法继续前进.
I have a server and I am trying to build a post request to get the data back. I think one way to achieve this is to add the parameters in the header and make the request. But I am getting few errors that I don't understand well enough to go forward.
HTML格式
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<form method="POST" action="http://some.server.com:61235/imgdigest" enctype="multipart/form-data">
quality:<input type="text" name="quality" value="2"><br>
category:<input type="text" name="category" value="1"><br>
debug:<input type="text" name="debug" value="1"><br>
image:<input type="file" name="image"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Python代码:我已根据答案编辑了问题
Python code: I have edited the question based on the answer
import urllib, urllib2
import base64
if __name__ == '__main__':
page = 'http://some.site.com:61235/'
with open("~/image.jpg", "rb") as image_file:
encoded_image = base64.b64encode(image_file.read())
raw_params = {'quality':'2','category':'1','debug':'0', 'image': encoded_image}
params = urllib.urlencode(raw_params)
request = urllib2.Request(page, params)
request.add_header("Content-type", "application/x-www-form-urlencoded; charset=UTF-8")
page = urllib2.urlopen(request)
info = page.info()
错误:
page = urllib2.urlopen(request)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 444, in error
return self._call_chain(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
推荐答案
添加此标头:
request.add_header("Content-type", "application/x-www-form-urlencoded; charset=UTF-8")
另外,您要发送的图像参数是一个字符串,而不是图像文件的内容.您需要对其进行b64编码
Also, the image parameter you're sending is a string, not the contents of the image file. You need to b64 encode it
import base64
with open("image.jpg", "rb") as image_file:
encoded_image = base64.b64encode(image_file.read())
然后使用encoded_image
代替raw_params
这篇关于Python:使用图像文件发布请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!