2014-01-28 70 views
0

我有以下例子的原始HTTP數據,任何想法如何匹配發布的數據?像"id=2134&var=test&anothervar=983344"(這只是一個例子,變量是名字不同,這就是爲什麼他們是variablesPython匹配原始HTTP POST數據

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 
+0

我不明白,正是你想做什麼?你爲什麼想要匹配它? –

+0

一個小個人項目,Apache日誌解析器等...... – bsteo

+0

是的,但通過_matching_呢?你想完全用它做什麼?例如將它們存儲在字典中?你想匹配整個請求還是隻匹配POST數據? –

回答

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) 
+0

謝謝Ben的回答!並感謝與我很長一段時間:) – bsteo

+0

不客氣! – Ben