Content Length表示的是http请求中的数据长度,也就是requests中的data对应长度。

通常我们给requests传递的data是字典格式的,那么直接使用len(data)是无法获得准确的content length的。

在http中,data是以字符串的形式传递的。那么以下的字典格式的data对应的字符串是什么呢?

1
2
3
4
data = {
'fid': 'df05ef96b6407055f8690b5f30322b58db776ecc7ef099197f03353e'
'BS_Termin_2021-06-14': 'buchen'
}

其对应的在tcp传输中的字符串是

fid=df05ef96b6407055f8690b5f30322b58db776ecc7ef099197f03353e&BS_Termin_2021-06-14=buchen

可以看到,键和值以’=’连接,多个参数以’&’连接。下面使用python代码计算整个字符串长度

1
2
3
4
5
6
7
8
9
def get_content_length(data):
#计算=和&的字节数
length = len(data.keys()) * 2 - 1
#计算键值的字节数。最后的encode是对字符串进行utf编码,
#如果键值包含中文,那么一个汉字字符对应三个字节,len()方法只能计算字符的个数
#而content length是字节数
total = ''.join(list(data.keys()) + list(data.values())).encode()
length += len(total)
return str(length)

评论