class_docstr: HTTP request handler base class.
  
  The following explanation of HTTP serves to guide you through the
  code as well as to expose any misunderstandings I may have about
  HTTP (so you don't need to read the code to figure out I'm wrong
  :-).
  
  HTTP (HyperText Transfer Protocol) is an extensible protocol on
  top of a reliable stream transport (e.g. TCP/IP).  The protocol
  recognizes three parts to a request:
  
  1. One line identifying the request type and path
  2. An optional set of RFC-822-style headers
  3. An optional data part
  
  The headers and data are separated by a blank line.
  
  The first line of the request has the form
  
  <command> <path> <version>
  
  where <command> is a (case-sensitive) keyword such as GET or POST,
  <path> is a string containing path information for the request,
  and <version> should be the string "HTTP/1.0" or "HTTP/1.1".
  <path> is encoded using the URL encoding scheme (using %xx to signify
  the ASCII character with hex code xx).
  
  The specification specifies that lines are separated by CRLF but
  for compatibility with the widest range of clients recommends
  servers also handle LF.  Similarly, whitespace in the request line
  is treated sensibly (allowing multiple spaces between components
  and allowing trailing whitespace).
  
  Similarly, for output, lines ought to be separated by CRLF pairs
  but most clients grok LF characters just fine.
  
  If the first line of the request has the form
  
  <command> <path>
  
  (i.e. <version> is left out) then this is assumed to be an HTTP
  0.9 request; this form has no optional headers and data part and
  the reply consists of just the data.
  
  The reply form of the HTTP 1.x protocol again has three parts:
  
  1. One line giving the response code
  2. An optional set of RFC-822-style headers
  3. The data
  
  Again, the headers and data are separated by a blank line.
  
  The response code line has the form
  
  <version> <responsecode> <responsestring>
  
  where <version> is the protocol version ("HTTP/1.0" or "HTTP/1.1"),
  <responsecode> is a 3-digit response code indicating success or
  failure of the request, and <responsestring> is an optional
  human-readable string explaining what the response code means.
  
  This server parses the request and the headers, and then calls a
  function specific to the request type (<command>).  Specifically,
  a request SPAM will be handled by a method do_SPAM().  If no
  such method exists the server sends an error response to the
  client.  If it exists, it is called with no arguments:
  
  do_SPAM()
  
  Note that the request name is case sensitive (i.e. SPAM and spam
  are different requests).
  
  The various request details are stored in instance variables:
  
  - client_address is the client IP address in the form (host,
  port);
  
  - command, path and version are the broken-down request line;
  
  - headers is an instance of email.message.Message (or a derived
  class) containing the header information;
  
  - rfile is a file object open for reading positioned at the
  start of the optional input data part;
  
  - wfile is a file object open for writing.
  
  IT IS IMPORTANT TO ADHERE TO THE PROTOCOL FOR WRITING!
  
  The first thing to be written must be the response line.  Then
  follow 0 or more header lines, then a blank line, and then the
  actual data (if any).  The meaning of the header lines depends on
  the command executed by the server; in most cases, when data is
  returned, there should be at least one header line of the form
  
  Content-type: <type>/<subtype>
  
  where <type> and <subtype> should be registered MIME types,
  e.g. "text/html" or "text/plain".
class_docstr_tok: ["HTTP","request","handler","base","class",".","The","following","explanation","of","HTTP","serves","to","guide","you","through","the","code","as","well","as","to","expose","any","misunderstandings","I","may","have","about","HTTP","(","so","you","do","n't","need","to","read","the","code","to","figure","out","I","'m","wrong",":","-",")",".","HTTP","(","HyperText","Transfer","Protocol",")","is","an","extensible","protocol","on","top","of","a","reliable","stream","transport","(","e.g",".","TCP\/IP",")",".","The","protocol","recognizes","three","parts","to","a","request",":","1",".","One","line","identifying","the","request","type","and","path","2",".","An","optional","set","of","RFC-822-style","headers","3",".","An","optional","data","part","The","headers","and","data","are","separated","by","a","blank","line",".","The","first","line","of","the","request","has","the","form","<","command",">","<","path",">","<","version",">","where","<","command",">","is","a","(","case-sensitive",")","keyword","such","as","GET","or","POST",",","<","path",">","is","a","string","containing","path","information","for","the","request",",","and","<","version",">","should","be","the","string","``","HTTP\/1.0","''","or","``","HTTP\/1.1","''",".","<","path",">","is","encoded","using","the","URL","encoding","scheme","(","using","%","xx","to","signify","the","ASCII","character","with","hex","code","xx",")",".","The","specification","specifies","that","lines","are","separated","by","CRLF","but","for","compatibility","with","the","widest","range","of","clients","recommends","servers","also","handle","LF",".","Similarly",",","whitespace","in","the","request","line","is","treated","sensibly","(","allowing","multiple","spaces","between","components","and","allowing","trailing","whitespace",")",".","Similarly",",","for","output",",","lines","ought","to","be","separated","by","CRLF","pairs","but","most","clients","grok","LF","characters","just","fine",".","If","the","first","line","of","the","request","has","the","form","<","command",">","<","path",">","(","i.e",".","<","version",">","is","left","out",")","then","this","is","assumed","to","be","an","HTTP","0.9","request",";","this","form","has","no","optional","headers","and","data","part","and","the","reply","consists","of","just","the","data",".","The","reply","form","of","the","HTTP","1.x","protocol","again","has","three","parts",":","1",".","One","line","giving","the","response","code","2",".","An","optional","set","of","RFC-822-style","headers","3",".","The","data","Again",",","the","headers","and","data","are","separated","by","a","blank","line",".","The","response","code","line","has","the","form","<","version",">","<","responsecode",">","<","responsestring",">","where","<","version",">","is","the","protocol","version","(","``","HTTP\/1.0","''","or","``","HTTP\/1.1","''",")",",","<","responsecode",">","is","a","3-digit","response","code","indicating","success","or","failure","of","the","request",",","and","<","responsestring",">","is","an","optional","human-readable","string","explaining","what","the","response","code","means",".","This","server","parses","the","request","and","the","headers",",","and","then","calls","a","function","specific","to","the","request","type","(","<","command",">",")",".","Specifically",",","a","request","SPAM","will","be","handled","by","a","method","do_SPAM","(",")",".","If","no","such","method","exists","the","server","sends","an","error","response","to","the","client",".","If","it","exists",",","it","is","called","with","no","arguments",":","do_SPAM","(",")","Note","that","the","request","name","is","case","sensitive","(","i.e",".","SPAM","and","spam","are","different","requests",")",".","The","various","request","details","are","stored","in","instance","variables",":","-","client_address","is","the","client","IP","address","in","the","form","(","host",",","port",")",";","-","command",",","path","and","version","are","the","broken-down","request","line",";","-","headers","is","an","instance","of","email.message.Message","(","or","a","derived","class",")","containing","the","header","information",";","-","rfile","is","a","file","object","open","for","reading","positioned","at","the","start","of","the","optional","input","data","part",";","-","wfile","is","a","file","object","open","for","writing",".","IT","IS","IMPORTANT","TO","ADHERE","TO","THE","PROTOCOL","FOR","WRITING","!","The","first","thing","to","be","written","must","be","the","response","line",".","Then","follow","0","or","more","header","lines",",","then","a","blank","line",",","and","then","the","actual","data","(","if","any",")",".","The","meaning","of","the","header","lines","depends","on","the","command","executed","by","the","server",";","in","most","cases",",","when","data","is","returned",",","there","should","be","at","least","one","header","line","of","the","form","Content-type",":","<","type",">","\/","<","subtype",">","where","<","type",">","and","<","subtype",">","should","be","registered","MIME","types",",","e.g",".","``","text\/html","''","or","``","text\/plain","''","."]
docstr: Handle a single HTTP request.
  
  You normally don't need to override this method; see the class
  __doc__ string for information on how to handle specific HTTP
  commands such as GET and POST.
docstr_tok: ["Handle","a","single","HTTP","request",".","You","normally","do","n't","need","to","override","this","method",";","see","the","class","__doc__","string","for","information","on","how","to","handle","specific","HTTP","commands","such","as","GET","and","POST","."]
code: def handle_one_request(self):
      """Handle a single HTTP request.
  
      You normally don't need to override this method; see the class
      __doc__ string for information on how to handle specific HTTP
      commands such as GET and POST.
  
      """
      try:
          self.raw_requestline = self.rfile.readline(65537)
          if len(self.raw_requestline) > 65536:
              self.requestline = ""
              self.request_version = ""
              self.command = ""
              self.send_error(HTTPStatus.REQUEST_URI_TOO_LONG)
              return
          if not self.raw_requestline:
              self.close_connection = True
              return
          if not self.parse_request():
              # An error code has been sent, just exit
              return
          mname = "do_" + self.command
          if not hasattr(self, mname):
              self.send_error(
                  HTTPStatus.NOT_IMPLEMENTED,
                  "Unsupported method (%r)" % self.command,
              )
              return
          method = getattr(self, mname)
          method()
          self.wfile.flush()  # actually send the response if not already done.
      except TimeoutError as e:
          # a read or a write timed out.  Discard this connection
          self.log_error("Request timed out: %r", e)
          self.close_connection = True
          return
  
imports: import copy
  import datetime
  import email.utils
  import html
  import http.client
  import io
  import itertools
  import mimetypes
  import os
  import posixpath
  import select
  import shutil
  import socket
  import socketserver
  import sys
  import time
  import urllib.parse
  from http import HTTPStatus
label_desc: Use image node_id 3 for calling the BaseHTTPRequestHandler obj's underlying member method code with example usage: obj.handle_one_request() without return types