fork download
  1. from http.server import BaseHTTPRequestHandler
  2. from io import BytesIO
  3.  
  4. class HTTPRequest(BaseHTTPRequestHandler):
  5. def __init__(self, request_text):
  6. self.rfile = BytesIO(request_text)
  7. self.raw_requestline = self.rfile.readline()
  8. self.error_code = self.error_message = None
  9. self.parse_request()
  10.  
  11. def send_error(self, code, message):
  12. self.error_code = code
  13. self.error_message = message
  14.  
  15.  
  16. request_text = (
  17. b'GET /who/ken/trust.html HTTP/1.1\r\n'
  18. b'Host: cm.bell-labs.com\r\n'
  19. b'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n'
  20. b'Accept: text/html;q=0.9,text/plain\r\n'
  21. b'\r\n'
  22. )
  23.  
  24. request = HTTPRequest(request_text)
  25.  
  26. print( "Error code:", request.error_code ) # None (check this first)
  27. print( "request.command", request.command ) # "GET"
  28. print( "request.path", request.path ) # "/who/ken/trust.html"
  29. print( "request.request_version", request.request_version ) # "HTTP/1.1"
  30. print( "len(request.headers)", len(request.headers) ) # 3
  31. print( "request.headers.keys()",request.headers.keys() ) # ['accept-charset', 'host', 'accept']
  32. print( "request.headers['host']", request.headers['host'] ) # "cm.bell-labs.com"
  33. print( "type(request.headers)", type(request.headers) )
Success #stdin #stdout 0.04s 15432KB
stdin
Standard input is empty
stdout
Error code: None
request.command GET
request.path /who/ken/trust.html
request.request_version HTTP/1.1
len(request.headers) 3
request.headers.keys() ['Host', 'Accept-Charset', 'Accept']
request.headers['host'] cm.bell-labs.com
type(request.headers) <class 'http.client.HTTPMessage'>