# My Proxy Manager curl 接口文档

这份文档只使用 `curl` 示例，不使用 PowerShell 的 `Invoke-RestMethod`。

## 基本信息

管理接口地址：

```text
http://服务器IP:18080
```

示例服务器：

```text
10.10.10.124
```

统一 token：

```text
td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=
```

除 `/health` 外，其他接口都需要认证头：

```text
Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=
```

## 1. 健康检查

不需要 token。

```cmd
curl http://10.10.10.124:18080/health
```

正常返回：

```json
{"time":"2026-06-16T17:38:55.9848247+08:00","ok":true,"service":"my-proxy-manager"}
```

## 2. 查询版本

需要 token。

```cmd
curl ^
  -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" ^
  http://10.10.10.124:18080/version
```

正常返回：

```json
{"serviceStatus":"Running","ok":true,"version":"my-goproxy version v19"}
```

## 3. 上传 exe 更新

本地文件名可以随便，远端最终都会覆盖成：

```text
C:\app\my-proxy\my-goproxy-win64.exe
```

先计算新版 exe 的 SHA256。

Windows CMD：

```cmd
certutil -hashfile my-goproxy-win64.exe SHA256
```

PowerShell：

```powershell
(Get-FileHash .\my-goproxy-win64.exe -Algorithm SHA256).Hash
```

然后把 SHA256 填到 `X-Proxy-Sha256`。

Windows CMD 示例：

```cmd
curl ^
  -X POST ^
  -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" ^
  -H "X-Proxy-Sha256: 这里填EXE的SHA256" ^
  -H "Content-Type: application/octet-stream" ^
  --data-binary "@my-goproxy-win64.exe" ^
  http://10.10.10.124:18080/update
```

PowerShell 中使用 `curl` 时，换行符用反引号：

```powershell
$sha256 = (Get-FileHash .\my-goproxy-win64.exe -Algorithm SHA256).Hash

curl `
  -X POST `
  -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" `
  -H "X-Proxy-Sha256: $sha256" `
  -H "Content-Type: application/octet-stream" `
  --data-binary "@my-goproxy-win64.exe" `
  http://10.10.10.124:18080/update
```

服务器收到后会：

```text
保存上传文件
校验 SHA256
停止 my-proxy 服务
备份旧 exe
替换为新 exe
启动 my-proxy 服务
返回更新结果
```

## 4. 通过 URL 下载更新

适合把新版 exe 放到内网 HTTP、对象存储、CDN，然后让每台服务器自己下载。

Windows CMD 示例：

```cmd
curl ^
  -X POST ^
  -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" ^
  -H "Content-Type: application/json" ^
  -d "{\"url\":\"https://download.example.com/proxy/my-goproxy-win64.exe\",\"sha256\":\"这里填EXE的SHA256\"}" ^
  http://10.10.10.124:18080/update
```

PowerShell 中使用 `curl`：

```powershell
curl `
  -X POST `
  -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" `
  -H "Content-Type: application/json" `
  -d '{"url":"https://download.example.com/proxy/my-goproxy-win64.exe","sha256":"这里填EXE的SHA256"}' `
  http://10.10.10.124:18080/update
```

注意：

```text
目标服务器必须能访问 url
sha256 必须是这个 url 对应 exe 的真实 SHA256
url 文件名可以随便
远端最终仍然覆盖成 C:\app\my-proxy\my-goproxy-win64.exe
```

## 5. 回滚

回滚到最近一次备份。

```cmd
curl ^
  -X POST ^
  -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" ^
  -d "" ^
  http://10.10.10.124:18080/rollback
```

备份目录：

```text
C:\app\my-proxy\releases
```

## 6. 重启代理服务

只重启 `my-proxy` 服务，不重启 `my-proxy-manager`。

```cmd
curl ^
  -X POST ^
  -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" ^
  -d "" ^
  http://10.10.10.124:18080/restart
```

## 7. 批量更新指定服务器

PowerShell 中仍然可以用 `curl` 循环调用多个目标。

```powershell
$targets = @("10.10.10.124", "10.10.10.125", "10.10.10.126")
$sha256 = (Get-FileHash .\my-goproxy-win64.exe -Algorithm SHA256).Hash

foreach ($server in $targets) {
  curl `
    -X POST `
    -H "Authorization: Bearer td3oisW/OhYLweb1+Zb05WpO4/Gmc+BqYbaTs3I05No=" `
    -H "X-Proxy-Sha256: $sha256" `
    -H "Content-Type: application/octet-stream" `
    --data-binary "@my-goproxy-win64.exe" `
    "http://${server}:18080/update"
}
```

## 8. 常见错误

`401 Unauthorized`：

```text
没有带 Authorization，或者 token 不正确。
```

`sha256 mismatch`：

```text
X-Proxy-Sha256 和服务端收到的文件实际 SHA256 不一致。
```

`curl: Could not resolve host`：

```text
服务器地址写错，或者把 SERVER_IP 这种占位符当成真实地址用了。
```

`Failed to connect`：

```text
18080 端口不通，检查 my-proxy-manager 服务、防火墙、安全组。
```

## 9. 代理端口 curl 测试

HTTP 代理：

```cmd
curl --proxy-user "用户名:密码" -x http://10.10.10.124:9002 http://ip.sb
```

SOCKS 代理：

```cmd
curl --socks5 用户名:密码@10.10.10.124:9001 http://ip.sb
```

Magic HTTP 代理：

```cmd
curl ^
  --proxy-user "用户名:密码" ^
  -x http://10.10.10.124:8001 ^
  -H "Obc-Use-IP: 出口IP" ^
  http://ip.sb
```

普通代理优先测试 `9002`。`9002` 能返回出口 IP，就说明 HTTP 代理可用。
