Python HTTP服务器在POST和GET请求时没有响应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python HTTP服务器在POST和GET请求时没有响应相关的知识,希望对你有一定的参考价值。

我需要创建一个HTTP服务器,它使用HTML页面处理Get和Post请求。我希望在Post请求中将名称和姓氏发送到服务器,然后使用Get请求显示在屏幕上。我创建了一个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()
答案

你必须用方法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请求中发送的值 - 我从来没有使用它。

FlaskDjangoBottle等更容易做到这一点。


编辑:与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

以上是关于Python HTTP服务器在POST和GET请求时没有响应的主要内容,如果未能解决你的问题,请参考以下文章

一个简单的http server,处理get和post请求,Python实现

一个简单的http server,处理get和post请求,Python实现

使用JSON处理GET和POST请求的简单Python服务器

Python爬虫入门之四urllib-GET与POST请求

python python中的最小http服务器。响应GET,HEAD,POST请求,但在其他任何事情上都会失败。

http请求中get和post请求的区别