之前使用nastool的交互工具使用了企业微信的机器人,但是企业微信需要设置可信ip,家里虽然有公网,但是隔段时间就会换ip,还得去上面更新,最新发现可以直接在serv00搭建代理服务,然后设置serv00的地址为固定地址。这样就不怕ip变了。其他的需要代理的理论上都可以这么设置。
设置域名反向代理
创建代理程序
本文使用python
import http.server
import socketserver
import requests
import json
FORWARD_URL = "https://qyapi.weixin.qq.com" # 不带路径的部分
class ForwardRequestHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path.startswith('/'):
url_path = self.path[1:]
else:
url_path = self.path
response = requests.get(FORWARD_URL + '/' + url_path)
self.send_response(response.status_code)
for key, value in response.headers.items():
self.send_header(key, value)
self.end_headers()
self.wfile.write(response.content)
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
# 确保 Content-Length 头不被重复传递
headers = {'Content-Type': 'application/json'}
if self.path.startswith('/'):
url_path = self.path[1:]
else:
url_path = self.path
# 提取 access_token
access_token = self.path.split('?')[1].split('&')[0].split('=')[1]
url = f"{FORWARD_URL}/{url_path}"
try:
# 尝试将请求体解码为 UTF-8 字符串
post_data_str = post_data.decode('utf-8')
# 尝试将字符串转换为 JSON 对象
post_data_json = json.loads(post_data_str)
# 使用 JSON 对象发送 POST 请求
response = requests.post(url, json=post_data_json, headers=headers)
except ValueError:
# 如果不是 JSON 格式,则直接发送原始数据
response = requests.post(url, data=post_data, headers=headers)
self.send_response(response.status_code)
for key, value in response.headers.items():
self.send_header(key, value)
self.end_headers()
self.wfile.write(response.content)
def run(server_class=socketserver.TCPServer, handler_class=ForwardRequestHandler, port=3003):
server_address = ('0.0.0.0', port)
httpd = server_class(server_address, handler_class)
print(f'Starting httpd on port {port}...')
httpd.serve_forever()
if __name__ == '__main__':
run()
使用pm2运行:
pm2 start ./get.py --name 'get_request' --interpreter python3
nastool的设置,设置推送代理
实现效果
手机端发送消息,发送到微信服务器,微信服务器通过nas的地址发送到NASTOOL,NASTOOL搜索影音,搜索完通过serv00的代理发送到serv00服务器,服务器再转发到微信服务器,微信服务器发送到手机客户端。
评论区