吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2161|回复: 20
收起左侧

[Python 原创] python3 实现 openai api 代{过}{滤}理服务器

[复制链接]
Vvvvvoid 发表于 2023-7-7 15:44
本帖最后由 Vvvvvoid 于 2023-7-7 17:49 编辑

0x0 前记

鉴于不可控原因, openai 的接口我们是访问不了的.
但是在我们的服务器内是可以访问的.
此时, 我们可以通过 python3 搭建一个 web服务, 来反向代{过}{滤}理 openai.
通过访问我们的服务器来间接调用 openai 的 api 接口

python 语法简单,开发快捷, 也很方便集成一些自定义的业务逻辑

0x1 代码实现

from http.client import HTTPSConnection
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse

PROXY_URL = 'api.openai.com'
HEADER_EXCLUSIVE = ['Host']

def get_header(src_header):
    return {key: value for key, value in src_header.items() if key not in HEADER_EXCLUSIVE}

class ProxyHandler(BaseHTTPRequestHandler):
    conn = HTTPSConnection(PROXY_URL)

    def handle_request(self, method):
        url = urlparse(self.path)
        if method not in ('GET', 'POST', 'PUT', 'DELETE'):
            self.send_error(400, 'Invalid method')
            return
        try:
            content_length = int(self.headers.get('Content-Length', 0))
            body = self.rfile.read(content_length) if content_length > 0 else None
            headers = get_header(dict(self.headers.items()))
            self.conn.request(method, self.path, body=body, headers=headers)
            res = self.conn.getresponse()
            self.send_response(res.status)
            for header in res.getheaders():
                self.send_header(header[0], header[1])
            self.end_headers()
            self.wfile.write(res.read())
        except Exception as e:
            self.send_error(500, str(e))

    def do_GET(self):
        self.handle_request('GET')

    def do_POST(self):
        self.handle_request('POST')

    def do_PUT(self):
        self.handle_request('PUT')

    def do_DELETE(self):
        self.handle_request('DELETE')

PORT = 9001

def run_proxy():
    httpd = HTTPServer(('localhost', PORT), ProxyHandler)
    print(f"Starting server at http://localhost:{PORT}")
    httpd.serve_forever()

if __name__ == '__main__':
    run_proxy()

0x2 启动服务

[root@ip-172-26-9-224 centos]# python3 openai.py
Starting server at http://localhost:9001
127.0.0.1 - - [07/Jul/2023 15:41:43] "GET /v1/models HTTP/1.1" 200 -

Snipaste_2023-07-07_15-42-45.png

由于代码简单, 就不写什么注释了....

免费评分

参与人数 5吾爱币 +12 热心值 +5 收起 理由
怅廖廓 + 1 + 1 谢谢@Thanks!
ForGot_227 + 2 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
blindcat + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
狂笑一君 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Vvvvvoid 发表于 2023-7-10 12:33
ForGot_227 发表于 2023-7-10 11:52
我找到的方案是:通过 cloudflare CDN直接反代。只需要一个域名,虽然不知道有什么限制,但胜在教程异常简 ...

python3 自己实现 有一个好处就是 可以添加一些自定义的业务逻辑
比如 关键词过滤 权限拦截什么的
ForGot_227 发表于 2023-7-10 11:52
我找到的方案是:通过 cloudflare CDN直接反代。只需要一个域名,虽然不知道有什么限制,但胜在教程异常简单
狂笑一君 发表于 2023-7-7 15:54
GMCN 发表于 2023-7-7 16:37
服务器上搭一个sockets代{过}{滤}理就行了
wkunzhi 发表于 2023-7-7 16:39
学习了感谢分享
XpecV52 发表于 2023-7-7 16:58
感谢分享 不可控=不可言说
lu_wakin 发表于 2023-7-7 17:04
需要这么麻烦吗,配置个nginx做个转发就行了
redfieldw 发表于 2023-7-7 17:04
好吧这个是要服务器的
thysut 发表于 2023-7-7 17:23
感谢分享,学习了
whh19921024 发表于 2023-7-7 22:27
nginx多简单
cao25468 发表于 2023-7-8 09:17
看的我都好难理解,可能我是菜鸟
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表