diff --git a/requests/models.py b/requests/models.py index 46451c5b..48d5927d 100644 --- a/requests/models.py +++ b/requests/models.py @@ -17,6 +17,7 @@ from .structures import CaseInsensitiveDict from .auth import HTTPBasicAuth from .cookies import cookiejar_from_dict, get_cookie_header +from .packages.urllib3.fields import RequestField from .packages.urllib3.filepost import encode_multipart_formdata from .packages.urllib3.util import parse_url from .exceptions import ( @@ -119,11 +120,14 @@ class RequestEncodingMixin(object): for (k, v) in files: # support for explicit filename ft = None + fh = None if isinstance(v, (tuple, list)): if len(v) == 2: fn, fp = v - else: + elif len(v) == 3: fn, fp, ft = v + else: + fn, fp, ft, fh = v else: fn = guess_filename(v) or k fp = v @@ -132,11 +136,10 @@ class RequestEncodingMixin(object): if isinstance(fp, bytes): fp = BytesIO(fp) - if ft: - new_v = (fn, fp.read(), ft) - else: - new_v = (fn, fp.read()) - new_fields.append((k, new_v)) + rf = RequestField(name=k, data=fp.read(), + filename=fn, headers=fh) + rf.make_multipart(content_type=ft) + new_fields.append(rf) body, content_type = encode_multipart_formdata(new_fields)