我有以下原始HTTP数据示例,任何想法如何匹配发布的数据?和"id=2134&var=test&anothervar=983344"
一样(这只是一个例子,变量在名称上有所不同,这就是它们为variables
的原因)
POST / HTTP/1.1
User-Agent: curl/7.27.0
Host: 127.0.0.1
Accept: */*
Content-Length: 39
Content-Type: application/x-www-form-urlencoded
id=2134&var=test&anothervar=983344
尝试了许多正则表达式匹配但效果不佳,因为我不能依赖=
,&
以及POST
和Content-Type: application/x-www-form-urlencoded
之外的数据中的任何永久匹配
如果有帮助,POST数据总是以\r\n
结束,因此可以匹配为数据结尾。
甚至“更多”原始:
POST / HTTP/1.1\r\n
User-Agent: curl/7.27.0\r\n
Host: 127.0.0.1\r\n
Accept: */*\r\n
Content-Length: 39\r\n
Content-Type: application/x-www-form-urlencoded\r\n
\r\n
id=2134&var=test&anothervar=983344&yetanothervar=u43333A\r\n
答案 0 :(得分:1)
如果您遵循HTTP标准,那么前两个连续新行之后的任何内容都是发布数据。这个正则表达式将匹配:
re.findall(r'^.*\r\n\r\n(.*)', data, re.MULTILINE)
正如您在评论中所说,如果您想要匹配并且不包括最后\r\n
,那么请在最后添加:
re.findall(r'^.*\r\n\r\n(.*)\r\n', data, re.MULTILINE)
或者,如果您只想匹配这些字符:
re.findall(r'^.*\r\n\r\n([A-Za-z0-9&=]*)\r\n', data, re.MULTILINE)