Skip to content

Instantly share code, notes, and snippets.

@DarcJC
Created February 23, 2024 06:20
Show Gist options
  • Save DarcJC/2844e6c3c3cfdb16d2d9eab810aa38d4 to your computer and use it in GitHub Desktop.
Save DarcJC/2844e6c3c3cfdb16d2d9eab810aa38d4 to your computer and use it in GitHub Desktop.
A bottle to catch any http request sent to it
from http.server import BaseHTTPRequestHandler, HTTPServer
import socket
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.return_request()
def do_POST(self):
self.return_request()
def do_PUT(self):
self.return_request()
def do_DELETE(self):
self.return_request()
def return_request(self):
# 获取客户端地址
client_ip, _ = self.client_address
# 获取请求行
request_line = f"{self.command} {self.path} {self.request_version}\r\n"
# 获取请求头
headers = ''.join(f"{k}: {v}\r\n" for k, v in self.headers.items())
# 获取请求体
content_length = self.headers.get('Content-Length')
if content_length:
body = self.rfile.read(int(content_length)).decode('utf-8')
else:
body = ''
# 组装完整的请求报文
request_message = f"{request_line}{headers}\r\n{body}"
# 返回原始请求报文
self.send_response(200)
self.send_header('Content-Type', 'text/plain; charset=utf-8')
self.end_headers()
self.wfile.write(request_message.encode('utf-8'))
print(request_message)
def run(server_class=HTTPServer, handler_class=RequestHandler, port=8080):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print(f"Starting httpd on port {port}...")
httpd.serve_forever()
if __name__ == "__main__":
from sys import argv
if len(argv) == 2:
run(port=int(argv[1]))
else:
run()
@DarcJC
Copy link
Author

DarcJC commented Feb 23, 2024

GPT4写的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment