gpt4 book ai didi

python - Django/httplib : transmitting request. raw_post_data 与 httplib

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:34 29 4
gpt4 key购买 nike

“AAaarg”!请帮忙!!!

这是我正在尝试做的...

我有一个 Django 站点 site1,它需要访问另一个服务 site2 的 API。然而,为了做到这一点,site1 需要使用它自己的登录凭据和东西......

因此我写了一个小的 Django 应用程序,它复制了 site2 的 url,但在引擎盖下,使用 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,
)

发布包含二进制数据(例如图像)的多部分数据 时出现问题。 httplib(在其之上构建了 httplib2)在构建请求字符串时,尝试将我的 post_data 与一些生成的 header 和内容连接起来。看起来 request.raw_post_datastring 类型,而生成的东西是 unicode。因此,它试图解码我的 post_data(其中包含二进制数据)并吓坏了!!!

比较httplib 第 807 行:

if isinstance(message_body, str):
msg += message_body

这是 message_body 的摘录(通过 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 吗?

最佳答案

来自:http://bugs.python.org/issue11898#msg138059如果您确保将 url 参数强制转换为 str,看起来您可能没问题。

关于python - Django/httplib : transmitting request. raw_post_data 与 httplib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6582955/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com