将 ProxyHub MCP 结果保存为 IP:Port 文件
读取 list_proxies 的 JSON 响应、处理错误并保存干净的 HTTP 代理文件,同时分清数据导出与实时检测。
要将 ProxyHub MCP 结果整理为每行一个 IP:port 的文件,应从完整的 JSON-RPC 响应开始,而不是复制聊天中的文本块。
- 通过 MCP 客户端调用
list_proxies,将type设为http。 - 将完整响应保存为
mcp-response.json。 - 将下面这个仅使用标准库的转换器保存为
mcp-to-file.py,与响应文件放在同一目录。
import json
from ipaddress import IPv4Address
from pathlib import Path
reply = json.loads(
Path("mcp-response.json").read_text(encoding="utf-8")
)
if "error" in reply:
raise RuntimeError("MCP returned a JSON-RPC error")
result = reply["result"]
if result.get("isError"):
raise RuntimeError("The proxy tool reported an error")
data = result["structuredContent"]
endpoints = []
seen = set()
for row in data["proxies"]:
if row["type"] != "http":
continue
host = str(IPv4Address(row["ip"]))
port = row["port"]
if type(port) is not int or not 1 <= port <= 65535:
raise ValueError("Invalid proxy port")
endpoint = f"{host}:{port}"
if endpoint not in seen:
seen.add(endpoint)
endpoints.append(endpoint)
text = "\n".join(endpoints)
Path("http-proxies.txt").write_text(
text + ("\n" if text else ""),
encoding="utf-8",
)
print(f"Saved {len(endpoints)} HTTP endpoints")
在该目录运行:
uv run --no-project python mcp-to-file.py
检查输出的数量及 http-proxies.txt。原始响应会保留。JSON-RPC 错误和工具层的 isError 响应会触发异常;成功响应若没有匹配项,则写入空文件并报告零。工具每次调用最多返回 100 条,所以输出只是本次返回的选择结果,不一定是整个HTTP 代理列表。
转换器只接受类型报告为 http 的记录,并检查 IPv4 语法和端口范围,与当前采集器的 IPv4 格式一致。使用其他协议时,应保留协议信息或另存文件;单纯混合的 IP:port 文件无法告诉接收它的客户端该使用哪种握手。
导出的记录仍只是数据。updated_at 记录的是存储数据的更新时间,并不代表从你所在网络发起的实时请求。对选中的端点,向所需目标发起有明确限制的 HTTP 代理请求进行检测。MCP 调用失败就排查数据获取;导出后再通过某个端点请求失败,则排查那一次独立的代理连接。