我使用 python 创建了一个服务器:
import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
HandlerClass = SimpleHTTPRequestHandler
ServerClass = BaseHTTPServer.HTTPServer
Protocol = "HTTP/1.0"
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8008
server_address = ('127.0.0.1', port)
HandlerClass.protocol_version = Protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()
然后创建一个简单的 HTML 表单:
<form action="" method="GET">
User Name :
<input type="text"id="username" placeholder="Enter User Name">
Password :
<input type="password" id="password" placeholder="Enter Password">
<button type="submit" id="submit">Sign in</button>
</form>
使用这段代码,我想将数据从 HTML 表单传输到 Python,然后打印。
我尝试了很多,但没有一个线程帮助我,否则我无法理解这一点,所以请给我一些建议,如何使用在控制台中打印 username
和 password
框值以上服务器代码。
最佳答案
一方面,您需要将名称属性添加到 <input>
表单上的字段。如果没有这些,则 GET 查询字符串中不会发送任何数据。
<form action="" method="GET">
User Name :
<input type="text" name="username" id="username" placeholder="Enter User Name">
Password :
<input type="password" name="password" id="password" placeholder="Enter Password">
<button type="submit" id="submit">Sign in</button>
</form>
然后您应该看到用户名和密码表单字段转储到您的控制台:
Serving HTTP on 127.0.0.1 port 8008 ... 127.0.0.1 - - [08/Jan/2015 23:56:38] "GET /x.html HTTP/1.1" 200 - 127.0.0.1 - - [08/Jan/2015 23:56:43] "GET /x.html?username=someone&password=secretstuff HTTP/1.1" 200 -
Edit (how to handle request)
To access the individual fields present in the query string you can override the SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET()
method and parse the query like this:
from SimpleHTTPServer import SimpleHTTPRequestHandler
import BaseHTTPServer
from urlparse import urlparse, parse_qs
class CustomHTTPRequestHandler(SimpleHTTPRequestHandler):
def do_GET(self):
query_string = urlparse(self.path).query
fields = parse_qs(query_string) if query_string else {}
if fields:
print "username = {}, password = {}".format(fields.get('username')[0], fields.get('password')[0])
return SimpleHTTPRequestHandler.do_GET(self)
if __name__ == '__main__':
BaseHTTPServer.HTTPServer(('', 8008), CustomHTTPRequestHandler).serve_forever()
请注意,出于安全原因,您应该在 HTML 表单和 https 中使用 POST。另外,看看CGIHTTPServer与 cgi
结合使用模块,甚至是第三方 Web 框架,例如 bottle , flask ,甚至django根据您的要求。这些框架使实现您想要的那种服务器变得更加容易。
关于python - 连接python服务器和html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839157/