“啊啊啊”!请帮忙 !!!
这就是我想要做的......
我有一个 Django 站点site1
,它需要访问另一个服务的 API site2
。但是,为了做到这一点,site1
需要使用自己的登录凭据和东西......
因此,我编写了一个小型 Django 应用程序,它复制 url 的 url site2
,但在底层,用于httplib2
传输请求几乎相同(只是身份验证和其他东西)。它在大多数情况下都很好用,实际上以前在所有情况下都很好用(我真的不知道是什么破坏了它,可能是更新 Python 2.6 -> 2.7)。
为了按原样传输 POST/PUT 数据,我得到它:
post_data = request.raw_post_data
然后用 httplib2 发送:
response, content = c.request(
url,
method,
post_data,
headers=headers,
)
发布multipart-data时会出现问题,其中包含图像等二进制数据。httplib
(在此之上httplib2
构建)在构建请求字符串时,尝试将 mypost_data
与一些生成的标头和内容连接起来。似乎request.raw_post_data
是string
type 而生成的东西是unicode
. 因此,它试图解码我的post_data
(包含二进制数据)并吓坏了!!!
参见httplib
第 807 行:
if isinstance(message_body, str):
msg += message_body
这是message_body
(gotten with request.raw_post_data
) 的摘录:
'-----------------------------697585321193462802080194682\r\nContent-Disposition: form-data; name="_method"\r\n\r\nPUT\r\n-----------------------------697585321193462802080194682\r\nContent-Disposition: form-data; name="jpegPhoto"; filename="crap.jpg"\r\nContent-Type: image/jpeg\r\n\r\n\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xfe\x00\x13Created with GIMP\xff\xdb\x00C\x00\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04
以下是 的内容msg
:
u'POST /user/spiq/?username=spiq HTTP/1.1\r\nContent-Length: 40307\r\naccept-language: en-us,en;q=0.5\r\naccept-encoding: gzip, deflate\r\nhost: localhost:8000\r\naccept: application/json\r\nuser-agent: Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0\r\naccept-charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\nconnection: keep-alive\r\nreferer: \r\ncookie: csrftoken=d9a3e014e5e366ee435b27ae7fc122af; sessionid=d5492a8d640e346b8ca56fa87e5cc439\r\ncontent-type: multipart/form-data\r\n\r\n'
所以基本上它注定了......
知道我应该如何进行吗?我可以在不解码的情况下打开post_data
它unicode
吗?