HTTP GET Eingabeparameter auf Serverseite in Python verarbeiten

Ich schrieb einen einfachen HTTP-Client und Server in Python für die Erfahrung. Das erste Code-Snippet unten zeigt, wie ich eine HTTP-Anfrage mit einem Parameter namens imsi senden. Im zweiten Code-Snippet zeige ich meine doGet-Funktionsimplementierung auf der Serverseite. Meine Frage ist, wie ich den imsi-Parameter im Server-Code extrahieren und eine Antwort an den Client senden kann, um dem Client zu signalisieren, dass imsi gültig ist. Vielen Dank.

PS: Ich habe festgestellt, dass der Client die Anfrage erfolgreich sendet.

CLIENT Code-Snippet

params = urllib.urlencode({'imsi': str(imsi)}) conn = httplib.HTTPConnection(host + ':' + str(port)) #conn.set_debuglevel(1) conn.request("GET", "/index.htm", 'imsi=' + str(imsi)) r = conn.getresponse() 

SERVER Code-Snippet

 import sys, string,cStringIO, cgi,time,datetime from os import curdir, sep from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer class MyHandler(BaseHTTPRequestHandler): # I WANT TO EXTRACT imsi parameter here and send a success response to # back to the client. def do_GET(self): try: if self.path.endswith(".html"): #self.path has /index.htm f = open(curdir + sep + self.path) self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() self.wfile.write("<h1>Device Static Content</h1>") self.wfile.write(f.read()) f.close() return if self.path.endswith(".esp"): #our dynamic content self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() self.wfile.write("<h1>Dynamic Dynamic Content</h1>") self.wfile.write("Today is the " + str(time.localtime()[7])) self.wfile.write(" day in the year " + str(time.localtime()[0])) return # The root self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() lst = list(sys.argv[1]) n = lst[len(lst) - 1] now = datetime.datetime.now() output = cStringIO.StringIO() output.write("<html><head>") output.write("<style type=\"text/css\">") output.write("h1 {color:blue;}") output.write("h2 {color:red;}") output.write("</style>") output.write("<h1>Device #" + n + " Root Content</h1>") output.write("<h2>Device Addr: " + sys.argv[1] + ":" + sys.argv[2] + "</h1>") output.write("<h2>Device Time: " + now.strftime("%Y-%m-%d %H:%M:%S") + "</h2>") output.write("</body>") output.write("</html>") self.wfile.write(output.getvalue()) return except IOError: self.send_error(404,'File Not Found: %s' % self.path) 

3 Solutions collect form web for “HTTP GET Eingabeparameter auf Serverseite in Python verarbeiten”

Sie können die Abfrage einer GET-Anfrage mit urlparse analysieren und dann die Abfragezeichenfolge aufteilen.

 from urlparse import urlparse query = urlparse(self.path).query query_components = dict(qc.split("=") for qc in query.split("&")) imsi = query_components["imsi"] # query_components = { "imsi" : "Hello" } # Or use the parse_qs method from urlparse import urlparse, parse_qs query_components = parse_qs(urlparse(self.path).query) imsi = query_components["imsi"] # query_components = { "imsi" : ["Hello"] } 

Sie können dies bestätigen

  curl http://your.host/?imsi=Hello 

BaseHTTPServer ist ein ziemlich niedriger Server. Im Allgemeinen willst du ein echtes Web-Framework verwenden, das diese Art von Grunzen für dich macht, aber da hast du gefragt …

Zuerst eine URL-Parsing-Bibliothek importieren. In Python 2, x ist es urlparse . (In Python3 würdest du urllib.parse verwenden )

 import urlparse 

Dann pflegen Sie in Ihrer do_get-Methode die Abfragezeichenfolge.

 imsi = urlparse.parse_qs(urlparse.urlparse(self.path).query).get('imsi', None) print imsi # Prints None or the string value of imsi 

Auch könntest du urllib in deinem client code benutzen und es wäre wahrscheinlich viel einfacher.

cgi Modul enthält FieldStorage Klasse, die im CGI-Kontext verwendet werden soll, aber auch in Ihrem Kontext leicht zu nutzen scheint.

  • Runnning ein Python-Webserver als Dienst in Windows
  • Multithread-Web-Server in Python
  • Wsdl2dispatch hebt eine Ausnahme aus, während die Serverdatei erzeugt wird
  • CherryPy mit Cheetah als Plugin + Tool - leere Seiten
  • Kann keine HTML-Datei mit Flasche mehr als einmal pro Iteration öffnen
  • OSError: [Errno 9] Schlechter Dateideskriptor in Python 3
  • Python Tornado macht statisches Verzeichnis
  • Erstellen eines Python-Webservers - Layout und Setup
  • Tornado oder Django arbeitet mit CGI?
  • Wenn man Tornado benutzt, wenn man Twisted / Cyclone / GEvent / andere
  • Python nicht ausgeführt und Code wird wörtlich auf der Seite angezeigt
  • Python ist die beste Programmiersprache der Welt.