Преобразование заголовков HTTP (string) в словарь python

Есть ли стандартная функция, которая преобразует заголовки http в словарь python и один для преобразования обратно?

Конечно, им нужно будет поддерживать сводку заголовков.

5 Solutions collect form web for “Преобразование заголовков HTTP (string) в словарь python”

Вместо того, чтобы создавать собственные сокеты и т. Д., Я бы использовал httplib. Таким образом, вы получите данные с http-сервера и проанализируйте заголовки в словаре, например

import httplib conn = httplib.HTTPConnection("www.python.org") conn.request("GET", "/index.html") r1 = conn.getresponse() dict = r1.getheaders() print(dict) 

дает

[('content-length', '16788'), ('accept-range', 'bytes'), ('server', 'Apache / 2.2.9 (Debian) DAV / 2 SVN / 1.5.1 mod_ssl / 2.2 .9 OpenSSL / 0.9.8g mod_wsgi / 2.5 Python / 2.5.2 '), (' last-modified ',' Mon, 15.02.2010 07:30:46 GMT '), (' etag ',' "105800d-4194 -47f9e9871d580 "'), (' date ',' Mon, 15 Feb 2010 21:34:18 GMT '), (' content-type ',' text / html ')]

и методы для отправки словаря в качестве части запроса.

Если вы не найдете какую-либо библиотеку, решающую проблему, вот наивное, непроверенное решение:

 def fold(header): line = "%s: %s" % (header[0], header[1]) if len(line) < 998: return line else: #fold lines = [line] while len(lines[-1]) > 998: split_this = lines[-1] #find last space in longest chunk admissible split_here = split_this[:998].rfind(" ") del lines[-1] lines = lines + [split_this[:split_here]), split_this[split_here:])] #this may still be too long #hence the while on lines[-1] return "\n".join(lines) def dict2header(data): return "\n".join((fold(header) for header in data.items())) def header2dict(data): data = data.replace("\n ", " ").splitlines() headers = {} for line in data: split_here = line.find(":") headers[line[:split_here]] = line[split_here:] return headers 

Я не совсем уверен, но это похоже на то, что вы ищете

Надеюсь это поможет

Я понимаю, что это сообщение с 2010 года, но я подумал, что лучше всего говорить. Я соглашаюсь с Mark's Post до тех пор, пока не будет назначен dict.

Так как getheaders возвращает список кортежей, а конструктор dict строит словари из пар ключ-значение, хранящихся в виде кортежей, вы можете создавать то, что хотите напрямую:

 import httplib conn = httplib.HTTPConnection("www.python.org") conn.request("GET", "/index.html") response = conn.getresponse() headers = dict(response.getheaders()) print(headers) 

Теперь вы получаете:

{'content-length': '18891', 'accept-range': 'bytes', 'server': 'Apache / 2.2.16 (Debian)', 'last-modified': 'Mon, 30 May 2011 19: 50:25 GMT ',' etag ':' "105800d-49cb-4a48399368240" ',' date ':' Mon, 30 May 2011 21:29:32 GMT ',' content-type ':' text / html '}

Если вы хотите вернуть эти кортежи, вызовите headers.items() .

И это моя версия без итерации:

 import re req_line = re.compile(r'(?P<method>GET|POST)\s+(?P<resource>.+?)\s+(?P<version>HTTP/1.1)') field_line = re.compile(r'\s*(?P<key>.+\S)\s*:\s+(?P<value>.+\S)\s*') def parse(http_post): first_line_end = http_post.find('\n') headers_end = http_post.find('\n\n') request = req_line.match( http_post[:first_line_end] ).groupdict() headers = dict( field_line.findall( http_post[first_line_end:headers_end] ) ) body = http_post[headers_end + 2:] return request, headers, body 
  • Http POST Curl в python
  • Как вернуть изображение в HTTP-ответе с помощью CherryPy
  • Как сделать HTTP POST на веб-сайте, использующем asp.net?
  • Как wsgi обрабатывает несколько заголовков запросов с тем же именем?
  • Ошибка прокси-сервера Python с библиотекой запросов
  • Как я могу поговорить с UniProt через HTTP в Python?
  • Загружайте часть документа только с помощью запросов python.
  • как я могу запросить html-страницу в «HTTP-запросе» и спрашивать только о каком-то регулярном выражении или конкретном теге html?
  • Python - лучший язык программирования в мире.