Ich bin ein Neuling für Python (mit v3.3) und Web-Programmierung und ich habe die ganze Nacht mit einem Problem gekämpft. Ich bin eine POST-Aufruf zu meinem Server Ausgabe und einige Daten zu senden, wie folgt:Wie greife ich auf die Daten zu, die mit BaseHTTPRequestHandler an meinen Server gesendet werden?
DATA = {"listName":"Test list","listDesc":"A test list with test stuff in it.","refreshMode":"Replace","DBKey":"1","UserDisplaySeq":"1"}
DATA = json.dumps(DATA)
METHOD = "POST"
DATA = DATA.encode("utf-8")
params = "account_id=acct 2"
try:
URL = "http://localhost:8080/lists?" + quote_plus(params)
request = urllib.request.Request(url=URL,data=DATA,method=METHOD)
response = urllib.request.urlopen(request)
...
ich auch einen Request-Handler haben wie folgt codiert (es gibt viele print-Anweisungen in hier für Debug-Zwecke):
class MyHandler(BaseHTTPRequestHandler):
...
def do_POST(self):
length = int(self.headers['Content-Length'])
print("HEADERS: ", self.headers)
print (str(length))
print(self.rfile)
post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8'))
print(post_data)
Dies druckt das folgende Ergebnis an die Konsole:
Starting thread
started httpserver...
HEADERS: Accept-Encoding: identity
User-Agent: Python-urllib/3.3
Content-Length: 138
Content-Type: application/x-www-form-urlencoded
Host: localhost:8080
Connection: close
138
<_io.BufferedReader name=404>
{}
Meine Fragen:
1) auf dem Server (do_POST), wie kann ich auf die Daten zugreifen, die ich mit meiner Anfrage gesendet habe (z. { "Listenname": "Testliste", "LISTDESC": "Ein Test ...)
2) Ist meine Anfrage auch die Daten in erster Linie das Senden
3) Gibt es einen Ort? wo dies in Anfänger-Auftragsbedingungen dokumentiert ist?
Sie können feststellen, dass die Verwendung eines Web-Frameworks wie Flask oder Bottle diese Dinge viel einfacher machen wird. – Blender
@Blender - Danke für den Hinweis. Ich habe es mit Bottle versucht, aber es schien wirklich darauf ausgerichtet zu sein, HTML zu verwenden, was wir in unserem Fall nicht verwenden. Wir schreiben eine RESTful-Anwendung, um die Arbeit auf mehreren Servern auszubalancieren und es hat wirklich keine Browser-Komponente. Wie fast alle diese Dinge, fand ich auch die Dokumentation von Bottle großartig, wenn du deine Sachen bereits kennst, aber wirklich hart für Anfänger, die keinen Hintergrund in Web-Konzepten haben. – Ben