我需要创建一个HTTP服务器,以处理HTML页面的Get和Post请求。 我希望名称和姓氏在“发布请求”中发送到服务器,然后与“获取请求”一起显示在屏幕上。 我创建了HTML页面,并创建了HTTP服务器。 但是,我不确定如何使所有内容连接起来。我一直在出错。 我目前收到的错误: 错误代码:501
消息:不支持的方法('POST')。
错误代码说明:HTTPStatus.NOT_IMPLEMENTED-服务器不支持此操作。
问题似乎是服务器不支持Post请求,但是我不确定如何使其支持请求。
import http.server
import socketserver
PORT = 8080
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
答案 0 :(得分:2)
您必须使用方法Handler
创建自己的do_POST
import http.server
import socketserver
class MyHandler(http.server.BaseHTTPRequestHandler):
def do_POST(self):
print("POST received")
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write("Hello World".encode('utf-8'))
PORT = 8080
Handler = MyHandler#http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
我用
进行了测试import requests
r = requests.post('http://localhost:8080')
print(r.text)
我不知道如何获取在POST请求中发送的值-我从不需要使用它。
编辑:与Flask相同。它还显示了如何发送值并用于响应。
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
print(request.form['name'], request.form['last_name'])
return "Hello " + request.form['last_name']
return "Hello World"
app.run(port=8080)
经过测试
import requests
form = {'name': 'James', 'last_name': 'Bond'}
r = requests.post('http://localhost:8080', data=form)
print(r.text) # Hello Bond