Python匹配原始HTTP POST数据

时间:2014-01-28 20:52:06

标签: python regex

我有以下原始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

尝试了许多正则表达式匹配但效果不佳,因为我不能依赖=&以及POSTContent-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

1 个答案:

答案 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)