2017-05-15 6 views
0

Ich versuche, POST-Anfragen in Python mit dem BaseHTTPRequestHandler-Modul zu empfangen. Ich schrieb ein einfaches HTML-Formular:Empty POST-Anfrage von HTML-Formular (Python)

<html> 
 
    <head> 
 
     <meta charset='UTF-8'> 
 
    </head> 
 
    <body> 
 
     <form action="http://localhost:8080/" method='post'> 
 
     <strong>Access point</strong><br> 
 
     <label for='ssid'>SSID: </label> 
 
      <input type='text' id=ssid><br> 
 
     <label for='passphrase'>Passphrase: </label> 
 
      <input type='password' id=passphrase><br> 
 
     <br> 
 
     <strong>Calendar</strong><br> 
 
     <label for='id'>ID: </label> 
 
      <input type='text' id=calid><br> 
 
     <br> 
 
     <input type='submit'> 
 
     <input type='reset'> 
 
     </form> 
 
    </body> 
 
    <html>

und eine minimale Anwendung:

# -*- coding: utf-8 -*- 

from http.server import BaseHTTPRequestHandler, HTTPServer 
import socketserver 
import socket 
import sys 

class ConfigHTTPRequestHandler(BaseHTTPRequestHandler): 
    def _set_headers(self): 
     self.send_response(200) 
     self.send_header('Content-type', 'text/html') 
     self.end_headers() 

    def do_GET(self): 
     self._set_headers() 
     with open("index.html", "rb") as f: 
      self.wfile.write(f.read()) 

    def do_HEAD(self): 
     self._set_headers() 

    def do_POST(self): 
     print(self.headers) 

     content_length = int(self.headers.get('Content-Length', 0)) 
     config_string = self.rfile.read(content_length).decode("UTF-8") 
     print("Content length: ", content_length) 
     print("Config string: [ ", config_string, " ]") 

     self._set_headers() 
     return 

ConfigHTTPRequestHandler.protocol_version = "HTTP/1.0" 
httpd = HTTPServer(("127.0.0.1", 8080), ConfigHTTPRequestHandler) 

sa = httpd.socket.getsockname() 
print("Serving HTTP on", sa[0], "port", sa[1], "...") 
try: 
    httpd.serve_forever() 
except KeyboardInterrupt: 
    print("\nKeyboard interrupt received, exiting.") 
    httpd.server_close() 
    sys.exit(0) 

Das Problem ist, dass die jeder POST-Anforderung leer ist. Ich bekomme content_length = 0.

Antwort

2

Bitte geben Sie Name Attribut zu Ihren Formularelementen und sehen, ob es funktioniert.

<html> 
    <head> 
     <meta charset='UTF-8'> 
    </head> 
    <body> 
     <form action="http://localhost:8080/" method='post'> 
      <strong>Access point</strong><br> 
      <label for='ssid'>SSID: </label> 
      <input type='text' id="ssid" name="ssid"><br> 
      <label for='passphrase'>Passphrase: </label> 
      <input type='password' id="passphrase" name="passphrase"><br> 
      <br> 
      <strong>Calendar</strong><br> 
      <label for='id'>ID: </label> 
      <input type='text' id="calid" name="calid"><br> 
      <br> 
      <input type='submit'> 
      <input type='reset'> 
     </form> 
    </body> 
<html> 
+0

Danke, das war es. – DBLouis