如何测试分隔正文和POST请求标题的行?

问题描述 投票:0回答:1

我正在尝试从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()的开头停止阅读,我需要在没有任何其他模块的情况下这样做

python http post http-post
1个回答
0
投票

遵循类似于如何收集Content-Length的实现,是否无法执行以下操作?

read()

如果该行存在:

first_value:应该保存第一个值(来自示例'john')

last_value:应该保留最后一个值(来自示例'doe')

UPDATE

由于误解了第一个问题,我在下面添加了另一个可能的解决方案。如果您需要来自其他标头的数据,可以扩展实现以处理 - 但是如果(例如)缺少“Content-Length”,这将会中断。

readlines()
© www.soinside.com 2019 - 2024. All rights reserved.