Files
winning-wallet-finder/host/mihomo-healthcheck.sh
T

62 lines
2.0 KiB
Bash
Raw Normal View History

#!/bin/bash
# mihomo 代理健康检查 - Polymarket 专用
# 逻辑:当前节点能下单就不换;不能下单就在日本/香港节点之间切换
# cron 每 5 分钟跑一次
API="http://127.0.0.1:9090"
PROXY="http://127.0.0.1:7890"
# 测试当前节点能否通过 Polymarket geo-gate(下单检测,不是读取检测)
# 用 POST /order 测,403=被block401=通过(到认证层了)
test_geo() {
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 -x $PROXY \
-X POST "https://clob.polymarket.com/order" \
-H "Content-Type: application/json" \
-d '{}' 2>/dev/null)
# 401 = 通过 geo-gate(到认证层了),403 = 被 block
if [ "$code" = "401" ] || [ "$code" = "400" ]; then
return 0 # 能下单
fi
return 1 # 不能下单
}
# 1. 测当前节点能不能下单
if test_geo; then
exit 0 # 能下单,不换
fi
# 2. 不能下单,在日本和香港节点之间找能用的
# 只选日本/香港/韩国/台湾(Polymarket 允许的地区)
nodes=$(curl -s "$API/proxies" | python3 -c "
import sys, json
d = json.load(sys.stdin)
skip = {'DIRECT','REJECT','自动选择','故障转移','良心云','GLOBAL',
'剩余流量','套餐到期'}
# 只允许的地区关键词(日本/香港最稳定)
allowed = ['日本', 'JP', 'Japan', '香港', 'HK', 'Hong Kong']
for name, info in d.get('proxies', {}).items():
if name in skip:
continue
if info.get('type') in ('Selector','URLTest','Fallback','LoadBalance'):
continue
# 只选允许地区的节点
if not any(k in name for k in allowed):
continue
print(name)
")
# 3. 逐个试,找到能下单的就切
for node in $nodes; do
curl -s -X PUT "$API/proxies/GLOBAL" \
-H "Content-Type: application/json" \
-d "{\"name\":\"$node\"}" > /dev/null
sleep 2
if test_geo; then
logger "mihomo-healthcheck: switched to $node (previous node geo-blocked)"
exit 0
fi
done
logger "mihomo-healthcheck: ALL JP/HK nodes failed - check mihomo or subscription"
exit 1