Http client to POST using multipart/form-data
2012-12-27 17:48
525 查看
转载一段python代码,通过urllib2使用multipart/form-data来发送文件
建议将httplib.HTTP更换为httplib.HTTPConnection,这样一来就能在httplib.Connection初始化的时候传入一个timeout,以实现更灵活的控制。
参阅:
http://code.activestate.com/recipes/146306/
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
import httplib, mimetypes def post_multipart(host, selector, fields, files): """ Post fields and files to an http host as multipart/form-data. fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return the server's response page. """ content_type, body = encode_multipart_formdata(fields, files) h = httplib.HTTP(host) h.putrequest('POST', selector) h.putheader('content-type', content_type) h.putheader('content-length', str(len(body))) h.endheaders() h.send(body) errcode, errmsg, headers = h.getreply() return h.file.read() def encode_multipart_formdata(fields, files): """ fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return (content_type, body) ready for httplib.HTTP instance """ BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$' CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('') L.append(value) for (key, filename, value) in files: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) L.append('Content-Type: %s' % get_content_type(filename)) L.append('') L.append(value) L.append('--' + BOUNDARY + '--') L.append('') body = CRLF.join(L) content_type = 'multipart/form-data; boundary=%s' % BOUNDARY return content_type, body def get_content_type(filename): return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
建议将httplib.HTTP更换为httplib.HTTPConnection,这样一来就能在httplib.Connection初始化的时候传入一个timeout,以实现更灵活的控制。
参阅:
http://code.activestate.com/recipes/146306/
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
相关文章推荐
- Http client to POST using multipart/form-data
- android向服务器上传multipart/form-data文件(upload using multipart post using httpclient in android)
- java httpclient multipart/form-data 方式post
- [c#][Windows 10 | Windows 10 mobile | Windows Phone] HttpClient 实现form-data POST上传请求
- Use Apache HttpClient to Post json data
- HttpWebRequest post "multipart/form-data"类型的web数据
- How to POST Form Data Using Ruby(转)
- C#中HttpWebRequest用Post提交Content-Type: multipart/form-data;
- C#中HttpWebRequest用Post提交Content-Type: multipart/form-data; boundary=
- HTTP Post之multipart/form-data和application/x-www-form-urlencoded
- HTTP协议之post multipart/form-data数据类型实例
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- [Project] Simulate HTTP Post Request to obtain data from Web Page by using Python Scrapy Framework
- How To Submit Form Data by Using XMLHTTP or ServerXMLHTTP Object
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- httpClient 使用multipart/form-data 类型上传文件及表单
- Http multipart/form-data多参数Post方式上传数据
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- httpclient发送multipart/form-data类型参数和用MultipartRequest接收参数
- Http 协议 post multipart/form-data