我正在尝试从POST请求的主体中获取参数的第一个和最后一个。基本上我有一个套接字服务器。此套接字服务器在连接时获取客户端并生成文件client= connection.makefile("wrb")
。
...
b'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0\r\n'
b'Accept-Language: en-US,en;q=0.5\r\n'
b'Referer: http://localhost:8080/app-index\r\n'
b'Content-Length: 22\r\n'
b'Upgrade-Insecure-Requests: 1\r\n'
b'first=dasda&last=dasda'
现在我使用readline()来浏览文件。
while 1:
line = client.readline()
print(line)
if("Content-Length" in line.decode("utf-8")):
num=line.decode("utf-8")
"if line doesnt have \n break":
break
temp = client.read(int(num[16:]))
num
变量是身体的内容长度。现在我正试图找到一种方法来打破它到达身体的时间,并使用read(num)
读取身体的内容,然后进一步处理它们。
我不知道还有什么去处理 - 如果有一种更有效的方式来阅读原始的POST数据,我很乐意听到它,但我不能使用任何模块或导入(我很想使用requests
模块但那不是一个选择)。
上面代码的问题是,当它涉及到身体时它永远不会停止,因为它正在寻找最后一个\n
。我无法将其附加到客户端,因为client.write()
会向客户端返回一个标头。
我尝试了很多东西,我尝试了qazxsw poi,qazxsw poi,qazxsw poi,但事情是一样的 - 我需要在readline()
的开头停止阅读,我需要在没有任何其他模块的情况下这样做
遵循类似于如何收集Content-Length的实现,是否无法执行以下操作?
read()
如果该行存在:
first_value:应该保存第一个值(来自示例'john')
last_value:应该保留最后一个值(来自示例'doe')
UPDATE
由于误解了第一个问题,我在下面添加了另一个可能的解决方案。如果您需要来自其他标头的数据,可以扩展实现以处理 - 但是如果(例如)缺少“Content-Length”,这将会中断。
readlines()