python
  • html
  • forms
  • post
  • basehttpserver
  • 2017-05-15 23 views 0 likes 
    0

    我想使用BaseHTTPRequestHandler模​​塊在Python中接收POST請求。我寫了一個簡單的HTML表單:來自HTML表單(Python)的空POST請求

    <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>

    和最小的應用:

    # -*- 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) 
    

    的問題是,在每一個崗位的要求是空的。我得到content_length = 0.

    回答

    2

    請提供名稱屬性到您的表單元素,看看它是否工作。

    <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

    謝謝,就是這樣。 – DBLouis

    相關問題