概述
Python3貌似有比较方便的方式,Python2得自己写点代码。
代码基本上参考了一位仁兄发布在github上的代码,但是找不到他的链接了,对不住。不过他的代码貌似跑不过,我这里做了修改后,发布在这里,希望对后来人有帮助。
其实最重要的还是要了解http有关这部分的协议。不懂的可以找相关资料了解一下,这里推荐一个:
《HTTP协议之multipart/form-data请求分析》
import httplib
import mimetypes
def post_multipart(host, selector, fields, files):
content_type, body = encode_multipart_formdata(fields, files)
body_buf = bytearray(body)
h = httplib.HTTP(host)
h.putrequest('POST', selector)
h.putheader('content-type', content_type)
h.putheader('content-length', str(len(body_buf)))
h.endheaders()
h.send(body_buf)
errcode, errmsg, headers = h.getreply()
print errcode, errmsg
return h.file.read()
def encode_multipart_formdata(fields, files):
LIMIT = '----------lImIt_of_THE_fIle_eW_$'
body = []
for (key, value) in fields:
body.extend(bytes('rn--' + LIMIT + 'rn'))
body.extend(bytes('Content-Disposition: form-data; name="%s"rn' % key))
body.extend(bytes('rn'))
body.extend(bytes(value))
for (key, filename, value) in files:
body.extend(bytes('rn--' + LIMIT + 'rn'))
body.extend(bytes('Content-Disposition: form-data; name="%s"; filename="%s"rn' % (key, filename)))
body.extend(bytes('Content-Type: %srn' % get_content_type(filename)))
body.extend(bytes('rn'))
body.extend(value)
body.extend('rn--' + LIMIT + '--rn')
content_type = 'multipart/form-data; boundary=%s' % LIMIT
return content_type, body
def get_content_type(filename):
return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
if "__main__" == __name__:
data = [0x01, 0x02, 0x03, 0x04]
fields = [("type", "0")]
files = [("data", "data", data)]
response_str = post_multipart("127.0.0.1:8080", "/doSomething", fields, files)
print response_str
最后
以上就是机智纸鹤为你收集整理的使用python2实现http multipart/form-data数据传输的全部内容,希望文章能够帮你解决使用python2实现http multipart/form-data数据传输所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复