使用pythonhttppos从内存上载二进制数据或文件

2024-10-01 11:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我见过通过multipartform-datapycurl上传文件的recipe。
这两种方法似乎都需要磁盘上的文件。
是否可以修改这些配方以从内存而不是从磁盘提供二进制数据?
我想我可以用一个xmlrpc server来代替。
我想避开不得不对二进制数据进行编码和解码并将其原始发送的问题。。。
pycurl和mutlipartform数据是否可以处理原始数据?在


Tags: 文件数据方法内存编码dataserver二进制
3条回答

今天我遇到了类似的问题,在尝试了pycurl和multipart/form数据之后,我决定阅读python httplib/urllib2源代码来找出答案,我确实得到了一个比较好的解决方案:

  1. 在执行post之前设置内容长度头(文件的)
  2. 发布时传递打开的文件

代码如下:

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

查看我的博客:http://www.2maomao.com/blog/python-http-post-a-binary-file-using-urllib2/

找到cas使用文件句柄的东西。然后简单地传递一个StringIO对象而不是一个真正的文件描述符。在

这个(小)库将使用一个文件描述符,并将执行httppost操作:https://github.com/seisen/urllib2_file/

您可以将StringIO对象(包含内存中的数据)作为文件描述符传递给它。在

相关问题 更多 >