我在看Python中的一些代码(我对Python一无所知),我遇到了这个部分:
def do_req(body):
global host, req
data = ""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 80))
s.sendall(req % (len(body), body))
tmpdata = s.recv(8192)
while len(tmpdata) > 0:
data += tmpdata
tmpdata = s.recv(8192)
s.close()
return data
Run Code Online (Sandbox Code Playgroud)
然后稍后使用大尺寸的主体调用它,超过500,000字节.这将发送到Apache服务器,该服务器的最大请求大小为默认的8190字节.
我的问题是" s.sendall()"部分发生了什么?显然整个身体不能立即发送,我猜它是通过模数运算符减少的.不过,我不知道它在Python中是如何工作的.谁能解释一下?谢谢.
它不是真正的模数运算符(技术上它是因为字符串只是实现__mod__)而是python2样式的字符串格式化运算符.
给定
format % values(格式为字符串或Unicode对象),格式的%转换规范将替换为零个或多个值元素.效果类似于C语言中的使用.sprintf()
显然整个身体不能立即发送
虽然它确实不适合单个数据包,这是一个内部处理的低级事物(很可能甚至不是由python而是由写入套接字的底层系统调用)