擅长:python、mysql、java
<p>今天我遇到了类似的问题,在尝试了pycurl和multipart/form数据之后,我决定阅读python httplib/urllib2源代码来找出答案,我确实得到了一个比较好的解决方案:</p>
<ol>
<li>在执行post之前设置内容长度头(文件的)</li>
<li>发布时传递打开的文件</li>
</ol>
<p>代码如下:</p>
<pre><code>import urllib2, os
image_path = "png\\01.png"
url = 'http://xx.oo.com/webserviceapi/postfile/'
length = os.path.getsize(image_path)
png_data = open(image_path, "rb")
request = urllib2.Request(url, data=png_data)
request.add_header('Cache-Control', 'no-cache')
request.add_header('Content-Length', '%d' % length)
request.add_header('Content-Type', 'image/png')
res = urllib2.urlopen(request).read().strip()
return res
</code></pre>
<p>查看我的博客:<a href="http://www.2maomao.com/blog/python-http-post-a-binary-file-using-urllib2/" rel="nofollow">http://www.2maomao.com/blog/python-http-post-a-binary-file-using-urllib2/</a></p>