- body = arg_data.encode('utf8')
-
- req = urllib_request.Request(uriBase, body, headers)
- return self._handle_response(req, uri, arg_data, _timeout)
+ body = arg_data.encode('utf-8')
+
+ # Handle query as multipart when sending media
+ if media:
+ BOUNDARY = b"###Python-Twitter###"
+ bod = []
+ bod.append(b'--' + BOUNDARY)
+ bod.append(
+ b'Content-Disposition: form-data; name="'
+ + actually_bytes(mediafield)
+ + b'"')
+ bod.append(b'Content-Type: application/octet-stream')
+ if not media_raw:
+ bod.append(b'Content-Transfer-Encoding: base64')
+ bod.append(b'')
+ bod.append(actually_bytes(media))
+ for k, v in kwargs.items():
+ k = actually_bytes(k)
+ v = actually_bytes(v)
+ bod.append(b'--' + BOUNDARY)
+ bod.append(b'Content-Disposition: form-data; name="' + k + b'"')
+ bod.append(b'Content-Type: text/plain;charset=utf-8')
+ bod.append(b'')
+ bod.append(v)
+ bod.append(b'--' + BOUNDARY + b'--')
+ bod.append(b'')
+ bod.append(b'')
+ body = b'\r\n'.join(bod)
+ # print(body.decode('utf-8', errors='ignore'))
+ headers['Content-Type'] = \
+ b'multipart/form-data; boundary=' + BOUNDARY
+
+ if not PY_3_OR_HIGHER:
+ url_base = url_base.encode("utf-8")
+ for k in headers:
+ headers[actually_bytes(k)] = actually_bytes(headers.pop(k))
+
+ req = urllib_request.Request(url_base, data=body, headers=headers)
+ if self.retry:
+ return self._handle_response_with_retry(req, uri, arg_data, _timeout)
+ else:
+ return self._handle_response(req, uri, arg_data, _timeout)