python - 如何为 POST 配置 python 服务器?
问题描述
我正在我的电脑上尝试一些 PHP,并制作了一个小型 python 服务器来托管文件,一个问题:它不能做 POST,我总是得到错误 501。我听说你可以在这些服务器中实现 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()
解决方案
当我需要这种功能时,这是我个人使用的脚本:
#!/usr/env python3
import http.server
import os
import logging
try:
import http.server as server
except ImportError:
# Handle Python 2.x
import SimpleHTTPServer as server
class HTTPRequestHandler(server.SimpleHTTPRequestHandler):
"""
SimpleHTTPServer with added bonus of:
- handle PUT requests
- log headers in GET request
"""
def do_GET(self):
server.SimpleHTTPRequestHandler.do_GET(self)
logging.warning(self.headers)
def do_PUT(self):
"""Save a file following a HTTP PUT request"""
filename = os.path.basename(self.path)
# Don't overwrite files
if os.path.exists(filename):
self.send_response(409, 'Conflict')
self.end_headers()
reply_body = '"%s" already exists\n' % filename
self.wfile.write(reply_body.encode('utf-8'))
return
file_length = int(self.headers['Content-Length'])
with open(filename, 'wb') as output_file:
output_file.write(self.rfile.read(file_length))
self.send_response(201, 'Created')
self.end_headers()
reply_body = 'Saved "%s"\n' % filename
self.wfile.write(reply_body.encode('utf-8'))
if __name__ == '__main__':
server.test(HandlerClass=HTTPRequestHandler)
但也许更合适、更简单的脚本如下,如Flavio Copes 的博客所示:
from http.server import BaseHTTPRequestHandler, HTTPServer
class handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
message = "Hello, World! Here is a GET response"
self.wfile.write(bytes(message, "utf8"))
def do_POST(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
message = "Hello, World! Here is a POST response"
self.wfile.write(bytes(message, "utf8"))
with HTTPServer(('', 8000), handler) as server:
server.serve_forever()
推荐阅读
- magento - 谷歌在magento 1上一键登录
- typescript - 在 Typescript 中,如何设置对象的类型以反映类属性的列表?
- python - Python venv/bin/activate 没有弹出这样的文件或目录
- sql - 如何计算与 SQL 中多个过滤器匹配的行数?
- python - 需要了解如何写入 .txt 文件,以便从文件开头附加最新结果
- java - Java - 如何使用 3 参数构造函数来设置 2 个实例变量
- azure - 在 Azure 中找不到我的 SQL Server 实例
- java - AnyLogic中遇到堆栈溢出错误
- c - 没有 Pthread 的 Windows 中的线程安全并发队列 C 示例
- raspberry-pi - 如何在 Raspberry pi ZERO W 上创建 adhoc 网络?