使用DPKT判断HTTP请求是GET还是POST的最佳方法?
我在使用 dpkt.http.Request() 这个功能,但有时候 HTTP 流并不是一个请求。有没有什么简单的方法可以在 Python 或 dpkt 中判断我的请求是 GET 还是 POST 呢?
2 个回答
1
>>> import dpkt
>>> r = dpkt.Request('GET / HTTP/1.0\r\n\r\n')
>>> 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
来获取使用的请求方法。