欢迎访问宙启技术站
智能推送

Python中使用HTTPServer()实现API代理服务器

发布时间:2023-12-26 14:47:39

在Python中,可以使用内置的HTTPServer模块来实现一个简单的API代理服务器。HTTPServer是Python标准库http.server模块中的一个类,可以用来创建一个基本的HTTP服务器。

下面是一个使用HTTPServer实现API代理服务器的例子:

from http.server import BaseHTTPRequestHandler, HTTPServer
import requests

# 代理目标API的基础地址
TARGET_API_BASE_URL = 'https://api.example.com'

class ProxyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 构建目标API的URL
        target_url = TARGET_API_BASE_URL + self.path

        try:
            # 请求目标API
            response = requests.get(target_url)

            # 获取响应内容和状态码
            content = response.content
            status_code = response.status_code

            # 设置代理服务器的响应头和状态码
            self.send_response(status_code)
            self.send_header('Content-type', 'application/json')
            self.end_headers()

            # 发送目标API的响应内容给客户端
            self.wfile.write(content)

        except requests.exceptions.RequestException as e:
            # 处理代理请求异常
            self.send_response(500)
            self.send_header('Content-type', 'application/json')
            self.end_headers()
            self.wfile.write(str(e).encode())

if __name__ == '__main__':
    # 创建代理服务器实例
    proxy_server = HTTPServer(('localhost', 8080), ProxyHandler)

    # 启动代理服务器
    print('Starting proxy server...')
    proxy_server.serve_forever()

在上述代码中,ProxyHandler类继承自BaseHTTPRequestHandler类,重写了do_GET方法来处理GET请求。在do_GET方法中,首先构建了目标API的URL,然后使用requests库发送请求到目标API。如果请求成功,将目标API的响应内容和状态码发送给客户端;如果请求失败,将返回一个500状态码和异常消息。

在代码的最后,创建了一个HTTPServer实例,并指定了代理服务器的地址和端口号。然后调用serve_forever方法来启动代理服务器,使其一直运行。

要使用这个代理服务器,只需修改TARGET_API_BASE_URL为实际目标API的地址,并且运行脚本即可。然后客户端可以通过访问http://localhost:8080来访问目标API。例如,如果目标API有一个/users的端点,客户端可以通过访问http://localhost:8080/users来获取对应的数据。

这个示例只是一个简单的API代理服务器的实现,在实际应用中可能需要添加更多的功能,比如处理POST请求、修改请求参数、记录日志等。可以根据实际需求对代理服务器进行定制化开发。