我有一种奇怪的情况,即内容较轻的请求最终消耗的字节数多于内容较大的请求。
这是我的代码:
import requests
import base64
def do_work(image_raw, image_name):
url = 'http://httpbin.org/post'
data = {'pic':image_raw}
res = requests.post(url, data=data, json={'name':image_name})
print len(image_raw), len(res.content)
image_enc = base64.b64encode(image_raw)
res = requests.post(url=url, json={'pic':image_enc, 'name':image_name})
print len(image_enc), len(res.content)
典型的结果是:
68166 925208
90888 182301
编码图像比原始图像重33%,这非常有意义。 但为什么第一个要求的重量要多得多呢? 我格式化请求的方式肯定有问题。
答案 0 :(得分:1)
注意:我使用的是Python 3,我的/api/v1/topology/summary
是一个image_raw
对象,因此结果会有所不同(可能是因为byte
之类的内容之间存在差异,byte
和unicode
),但解释应该适用。
有助于打印出实际str
的一部分。在第一种情况下:
res.content
在第二种情况下:
>>> res.content[:200]
b'{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "pic": "\\ufffdPNG\\r\\n\\u001a\\n\\u0000\\u0000\\u0000\\rIHDR\\u0000\\u0000\\u0001\\u000f\\u0000\\u0000\\u0000\\u0019\\b\\u0002\\u0000\\u0000\\u0000\\ufffd\\uf'
如您所见,>>> res.content[:200]
b'{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "name": "1.png", \n "pic": "iVBORw0KGgoAAAANSUhEUgAAAQ8AAAAZCAIAAACgtTxbAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAc'
,http://httpbin.org/post返回的字符串实际上是POST数据的人类可读表示。在第一种情况下,POST数据包含许多非ASCII字符,这些字符以比base64 - res.content
转义序列更低效的编码进行编码。这就是为什么\uxxxx
的长度在第一种情况下更长。