Я использую функцию dpkt.http.Request(), но иногда поток http не является запросом. Есть ли быстрый способ в python или dpkt узнать, является ли мой запрос GET или POST?
>>> 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'
Попробуйте разобрать его как HTTP-запрос и поймать dpkt.UnpackError
, чтобы ваша программа не умерла, если это не HTTP-запрос.
Если никакое исключение не было выбрано, вы можете использовать .method
объекта Request
для получения используемого метода.