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.

  • Was sind die Möglichkeiten, ein Server-Side-Skript für immer laufen?
  • Erstellen eines Python-Webservers - Layout und Setup
  • Wie kann ich eine Variable vom Webserver mit AJAX anfordern?
  • Python -m SimpleHTTPServer - Hören auf 0.0.0.0:8000 aber http://0.0.0.0:8000/test.html gibt "Seite nicht gefunden"
  • Reverse Proxy fähige reine Python Webserver?
  • Wie schreibe ich einen python HTTP Server, um auf mehrere Ports zu hören?
  • Tornado oder Django arbeitet mit CGI?
  • Python nicht ausgeführt und Code wird wörtlich auf der Seite angezeigt
  • Python ist die beste Programmiersprache der Welt.