如何使用 python 套接字获取表单值?
How to get form value using python sockets?
我用表单创建了一个简单的网站,我想获取在 id 'message'
上输入的输入
我的代码:
website.py
import socket
SERVER_HOST = '127.0.0.1'
SERVER_PORT = 8000
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((SERVER_HOST, SERVER_PORT))
server_socket.listen(1)
print('Listening on port %s ...' % SERVER_PORT)
#sender
while True:
client_connection, client_address = server_socket.accept()
request = client_connection.recv(1024).decode()
print(request)
with open('form.html', 'r')as f:
file=f.read()
response = 'HTTP/1.0 200 OK\n\n'+file
client_connection.sendall(response.encode())
client_connection.close()
server_socket.close()
form.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>form</title>
</head>
<body>
<form action="/" method="get" accept-charset="utf-8">
<input type="text" name="message" id="message" value="" />
<input type="submit" name="submit" id="submit" value="submit" />
</form>
<script>
//what will be here?
</script>
</body>
</html>
你能帮我打印在 id 'message' 上输入的输入吗?
仅使用套接字或其他内部库。
有多种方法可以做到:
- 使用
XMLHttpRequest
可以进行网络请求。这可用于获取页面。示例:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText); // good result !
}
};
xmlhttp.open("GET", "http://my.url/example", true);
xmlhttp.send();
然后,在您的 HTML 页面中,您只需要 return 结果。
- 使用
WebSocket
服务器端
你必须使用支持 WebSocket 的东西。它不同于“基本”套接字,因为它将通过 HTTP 协议(但在 8000 端口上)。
要做到这一点,您应该使用 Python Websocket。您可以使用 pip install websocket-server
.
安装它
这是我的代码:
import logging
from websocket_server import WebsocketServer
def new_client(client, server):
print("New client !")
def received_msg(client, server, message):
print("New message:", message)
server = WebsocketServer(host='127.0.0.1', port=8000, loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.set_fn_message_received(received_msg)
server.run_forever()
客户端
这是 HTML websocket 利用率的部分:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>form</title>
</head>
<body>
<form action="/" method="get" accept-charset="utf-8">
<input type="text" name="message" id="message" value="" />
</form>
<button onclick="run()">Run</button>
</body>
<script type="text/javascript">
var socket = new WebSocket("ws://localhost:8000");
socket.onopen = function (event) {
console.log("opened");
socket.send("Opened !");
};
function run() {
socket.send(JSON.stringify({ "message": document.getElementById("message").value }));
}
</script>
</html>
终于
当您显示 HTML 页面时,输入消息并单击“运行”:
INFO:websocket_server.websocket_server:Listening on port 8000 for clients..
INFO:websocket_server.websocket_server:Starting WebsocketServer on main thread.
New client !
New message: Opened !
New message: {"message":"value"}
我用表单创建了一个简单的网站,我想获取在 id 'message'
上输入的输入
我的代码:
website.py
import socket
SERVER_HOST = '127.0.0.1'
SERVER_PORT = 8000
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((SERVER_HOST, SERVER_PORT))
server_socket.listen(1)
print('Listening on port %s ...' % SERVER_PORT)
#sender
while True:
client_connection, client_address = server_socket.accept()
request = client_connection.recv(1024).decode()
print(request)
with open('form.html', 'r')as f:
file=f.read()
response = 'HTTP/1.0 200 OK\n\n'+file
client_connection.sendall(response.encode())
client_connection.close()
server_socket.close()
form.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>form</title>
</head>
<body>
<form action="/" method="get" accept-charset="utf-8">
<input type="text" name="message" id="message" value="" />
<input type="submit" name="submit" id="submit" value="submit" />
</form>
<script>
//what will be here?
</script>
</body>
</html>
你能帮我打印在 id 'message' 上输入的输入吗?
仅使用套接字或其他内部库。
有多种方法可以做到:
- 使用
XMLHttpRequest
可以进行网络请求。这可用于获取页面。示例:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText); // good result !
}
};
xmlhttp.open("GET", "http://my.url/example", true);
xmlhttp.send();
然后,在您的 HTML 页面中,您只需要 return 结果。
- 使用
WebSocket
服务器端
你必须使用支持 WebSocket 的东西。它不同于“基本”套接字,因为它将通过 HTTP 协议(但在 8000 端口上)。
要做到这一点,您应该使用 Python Websocket。您可以使用 pip install websocket-server
.
这是我的代码:
import logging
from websocket_server import WebsocketServer
def new_client(client, server):
print("New client !")
def received_msg(client, server, message):
print("New message:", message)
server = WebsocketServer(host='127.0.0.1', port=8000, loglevel=logging.INFO)
server.set_fn_new_client(new_client)
server.set_fn_message_received(received_msg)
server.run_forever()
客户端
这是 HTML websocket 利用率的部分:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>form</title>
</head>
<body>
<form action="/" method="get" accept-charset="utf-8">
<input type="text" name="message" id="message" value="" />
</form>
<button onclick="run()">Run</button>
</body>
<script type="text/javascript">
var socket = new WebSocket("ws://localhost:8000");
socket.onopen = function (event) {
console.log("opened");
socket.send("Opened !");
};
function run() {
socket.send(JSON.stringify({ "message": document.getElementById("message").value }));
}
</script>
</html>
终于
当您显示 HTML 页面时,输入消息并单击“运行”:
INFO:websocket_server.websocket_server:Listening on port 8000 for clients..
INFO:websocket_server.websocket_server:Starting WebsocketServer on main thread.
New client !
New message: Opened !
New message: {"message":"value"}