Traitement GET HTTP paramètre d'entrée sur le côté serveur en python
J'ai écrit un simple client HTTP et le serveur en Python pour l'expérimentation. Le premier extrait de code ci-dessous montre comment j'ai envoyer une demande HTTP GET avec un paramètre nommé imsi. Dans le deuxième extrait de code que je montre mon do_Get fonction de la mise en œuvre dans le côté serveur. Ma question est comment je peux extraire l'imsi paramètre dans le code serveur et d'envoyer une réponse au client dans le but de signaler au client que l'imsi est valide.
Merci.
P. S.: j'ai vérifié que le client envoie la demande avec succès.
CLIENT extrait de code
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()
SERVEUR extrait de code
import sys, string, cStringIO, cgi, time, datetime
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
# I want to extract the 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)
n'avez-vous pas obtenir le
Connexes: stackoverflow.com/questions/2490162/...
args
envoyé avec le GET
demande?Connexes: stackoverflow.com/questions/2490162/...
OriginalL'auteur F. Aydemir | 2012-01-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez analyser la requête d'une requête GET à l'aide urlparse, puis diviser la chaîne de requête.
Vous pouvez le vérifier en utilisant
Ah bien sûr, merci pour s'apercevoir qu' =)
Avec Python 3, utilisation
from urllib.parse import urlparse
source: stackoverflow.com/a/5239594/4669135OriginalL'auteur ib.lundgren
BaseHTTPServer est un assez faible niveau serveur. En règle générale, vous souhaitez utiliser un vrai framework web qui ne ce genre de gros du travail pour vous, mais puisque vous le demandez...
D'abord importer une url de l'analyse de la bibliothèque. En Python 2,x c'est urlparse. (En Python3, vous pouvez utiliser urllib.analyser)
Puis, dans votre do_get méthode, analyser la chaîne de requête.
Aussi, vous pourriez être en utilisant urllib dans votre code client et il serait sans doute beaucoup plus facile.
OriginalL'auteur Ken Kinder
cgi
module contientFieldStorage
classe qui est censé être utilisé dans le contexte CGI, mais semble être facilement utilisé dans votre contexte.OriginalL'auteur newtover