奇怪的python请求消息大小

2024-04-26 03:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个奇怪的情况,即具有较轻内容的请求最终比具有较大内容的请求消耗更多的字节。你知道吗

这是我的密码:

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%,这很有道理。 但是为什么第一个请求更重要呢? 我格式化请求的方式一定有问题。你知道吗


Tags: nameimageimportjsonurl内容dataraw
1条回答
网友
1楼 · 发布于 2024-04-26 03:21:47

注意:我使用的是python3,而我的image_raw是一个byte对象,因此结果会有所不同(可能是由于byteunicodestr之间的差异),但是解释应该是适用的。你知道吗

它有助于打印出一部分实际的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'

如您所见,res.contenthttp://httpbin.org/post返回的字符串实际上是POST数据的可读表示。在第一种情况下,POST数据包含许多非ASCII字符,这些字符采用比base64\uxxxx转义序列更低效的编码方式进行编码。这就是为什么在第一种情况下res.content的长度更长。你知道吗

相关问题 更多 >

    热门问题