Files

74 lines
3.0 KiB
Bash

#!/bin/bash
# okx_proxy_test.sh - 完整测试 OKX 在国内 VPS 的可达性
# 区分: 直连 vs 走代理 vs 不带 proxies 字段的 ccxt
# 2026-08-31 实测: 国内 VPS 直连 OKX 不通 (No route to host) -> GFW 屏蔽 (DNS 劫持到 169.254.0.2)
# OKX 没有"国内节点", 必须依赖代理 (mihomo/clash 127.0.0.1:7890)
set -e
PYTHON="/home/openclaw/.hermes/hermes-agent/venv/bin/python"
echo "=== OKX 国内 VPS 可达性测试 ==="
echo ""
echo "--- 1. 直连 (无 proxy env, 无 curl -x) ---"
unset HTTPS_PROXY HTTP_PROXY https_proxy http_proxy
RESP=$(curl -sS --max-time 10 -o /tmp/okx_resp.txt -w "%{http_code}" "https://www.okx.com/api/v5/public/time" 2>&1 || echo "FAIL")
echo "HTTP: $RESP"
echo "body: $(cat /tmp/okx_resp.txt 2>/dev/null | head -1)"
echo ""
echo "--- 2. 走 127.0.0.1:7890 代理 ---"
RESP=$(curl -sS --max-time 10 -x http://127.0.0.1:7890 -o /tmp/okx_resp.txt -w "%{http_code}" "https://www.okx.com/api/v5/public/time" 2>&1 || echo "FAIL")
echo "HTTP: $RESP"
echo "body: $(cat /tmp/okx_resp.txt 2>/dev/null | head -1)"
echo ""
echo "--- 3. ccxt 不带 proxies (Python 默认不捡 shell env, trust_env=False) ---"
$PYTHON << 'PYEOF'
import ccxt, os
bashrc = open('/home/openclaw/.bashrc').read()
key = bashrc.split('OKX_API_KEY=')[1].split('\n')[0].strip()
sec = bashrc.split('OKX_SECRET=')[1].split('\n')[0].strip()
pwd = bashrc.split('OKX_PASSPHRASE=')[1].split('\n')[0].strip()
ex = ccxt.okx({'apiKey':key,'secret':sec,'password':pwd, 'options':{'defaultType':'swap'}})
try:
bal = ex.fetch_balance()
print(f'✅ Free: ${bal["USDT"]["free"]:.2f}')
except Exception as e:
print(f'❌ {type(e).__name__}')
PYEOF
echo ""
echo "--- 4. ccxt 带 proxies 127.0.0.1:7890 (推荐方式) ---"
proxychains4 -f /home/openclaw/.proxychains/proxychains.conf $PYTHON << 'PYEOF'
import ccxt
bashrc = open('/home/openclaw/.bashrc').read()
key = bashrc.split('OKX_API_KEY=')[1].split('\n')[0].strip()
sec = bashrc.split('OKX_SECRET=')[1].split('\n')[0].strip()
pwd = bashrc.split('OKX_PASSPHRASE=')[1].split('\n')[0].strip()
ex = ccxt.okx({'apiKey':key,'secret':sec,'password':pwd,
'proxies':{'http':'http://127.0.0.1:7890','https':'http://127.0.0.1:7890'},
'options':{'defaultType':'swap'}})
try:
bal = ex.fetch_balance()
print(f'✅ Free: ${bal["USDT"]["free"]:.2f}')
except Exception as e:
print(f'❌ {type(e).__name__}')
PYEOF
echo ""
echo "--- 5. DNS 验证 (理解为什么直连失败) ---"
echo "国内 DNS (114):"
dig @114.114.114.114 www.okx.com +short 2>&1 | head -3
echo "Google DNS (8.8.8.8):"
dig @8.8.8.8 www.okx.com +short 2>&1 | head -3
echo ""
echo "都解析到 169.254.0.2 (APIPA, 不可路由) = GFW 屏蔽"
echo ""
echo "=== 结论 ==="
echo "1. 国内 VPS 必须走 127.0.0.1:7890 代理"
echo "2. 不是 OKX 限制, 是 GFW 屏蔽 (DNS 劫持 169.254.0.2)"
echo "3. ccxt 必须显式写 proxies 字段 (不自动捡 shell env)"
echo "4. okx_position_advisor.py 的 proxies 字段必须保留"
echo "5. VPS 搬海外 (东京/新加坡/香港) 才能砍掉代理"