使用DPKT判断HTTP请求是GET还是POST的最佳方法?

1 投票
2 回答
1071 浏览
提问于 2025-04-16 19:51

我在使用 dpkt.http.Request() 这个功能,但有时候 HTTP 流并不是一个请求。有没有什么简单的方法可以在 Python 或 dpkt 中判断我的请求是 GET 还是 POST 呢?

2 个回答

1
>>> import dpkt
>>> r = dpkt.Request('GET / HTTP/1.0\r\n\r\n')

找到HTTP请求的动作(动词)很简单:

>>> r.method
"GET"

如果在解析HTTP请求数据时遇到困难,那么就无法恢复原始的数据,因为dpkt.Request.unpack这个方法处理错误的方式使得这一点变得不可能。

作为一种解决办法,可以尝试使用类似下面的方式:

>>> data = 'GET / HTT' #malformed request
>>> try:
...     r = dpkt.Request(data)
... except dpkt.UnpackError:
...     print data.split()[0]
...
'GET'
1

试着把它当作一个HTTP请求来解析,并捕捉dpkt.UnpackError这个错误,这样如果它不是一个HTTP请求,你的程序就不会崩溃。

如果没有抛出任何错误,你可以使用Request对象的.method来获取使用的请求方法。

撰写回答