gpt4 book ai didi

python:带有未编码二进制数据的HTTP PUT

转载 作者:太空狗 更新时间:2023-10-29 18:16:12 25 4
gpt4 key购买 nike

我这辈子都想不出如何使用标准 Python 库在 Python 2.7 中执行带有逐字二进制数据的 HTTP PUT 请求。

我以为我可以用 urllib2 做到这一点,但是 that fails因为urllib2.Request期望其数据采用 application/x-www-form-urlencoded 格式。我不想对二进制数据进行编码,我只想在包含

的 header 之后逐字传输
Content-Type: application/octet-stream
Content-Length: (whatever my binary data length is)

这看起来很简单,但我一直在兜圈子,似乎无法弄清楚如何做。

我该怎么做? (除了打开一个原始的二进制套接字并写入它之外)

最佳答案

我发现了我的问题。 urllib2.Request 中似乎有一些模糊的行为/urllib2.urlopen() (至少在 Python 2.7 中)

urllib2.Request(url, data, headers) 构造函数似乎期望在其 url 和数据参数中使用相同类型的字符串。

我从文件 read() 调用中给数据参数原始数据(在 Python 2.7 中以“普通”字符串的形式返回它),但我的 url 不小心是 Unicode 因为我从另一个返回 Unicode 字符串的函数的结果中连接了一部分 URL。

它没有尝试从 Unicode -> 纯字符串“向下转换”url,而是尝试将 data 参数“向上转换”为 Unicode,它给了我一个编解码器错误。 (奇怪的是,这发生在 urllib2.urlopen() 函数调用上,而不是 urllib2.Request 构造函数)

当我将函数调用更改为

# headers contains `{'Content-Type': 'application/octet-stream'}`
r = urllib2.Request(url.encode('utf-8'), data, headers)

它运行良好。

关于python:带有未编码二进制数据的HTTP PUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705962/

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