You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将proxy.py与ngrok配合实现公网可访问的代理服务?

解决proxy.py公网访问问题的方案

我来帮你搞定这个问题!核心问题出在proxy.py默认只监听本地localhost(127.0.0.1)——这意味着它只会响应来自你本机的请求,即使ngrok把公网流量转发到8899端口,proxy.py也会拒绝处理这些外部请求。下面是具体的解决步骤:

1. 修改proxy.py的启动参数,监听所有网卡

停止当前运行的proxy服务,然后用以下命令重新启动:

proxy --hostname 0.0.0.0 --port 8899

--hostname 0.0.0.0 让服务绑定到本机的所有网卡,这样就能接收来自ngrok转发的公网请求了。如果你的proxy.py版本较旧,可能需要用 -b 0.0.0.0 代替 --hostname 0.0.0.0,可以通过 proxy --help 查看具体参数说明。

2. 验证本地代理仍正常工作

先确保修改后的本地代理还能正常使用,运行你之前的本地测试代码:

import requests
resp = requests.get("http://httpbin.org/ip", proxies={'http':'http://localhost:8899'}).text
print(resp)

如果能正常返回你的本地IP,说明服务配置没问题。

3. 重新启动ngrok(可选,若之前进程未关闭)

如果之前的ngrok进程还在运行,可以先终止它,再重新执行:

ngrok http 8899

获取最新的公网转发链接(比如你之前的 http://0ebe-117-220-248-73.ngrok.io)。

4. 测试公网代理请求

更新你的requests代码,注意同时配置http和https的代理(如果需要代理HTTPS请求):

import requests

# 替换为你的ngrok公网链接
ngrok_proxy_url = "http://0ebe-117-220-248-73.ngrok.io"
proxies_config = {
    "http": ngrok_proxy_url,
    "https": ngrok_proxy_url
}

try:
    response = requests.get("http://httpbin.org/ip", proxies=proxies_config, timeout=10)
    print(response.text)
except Exception as e:
    print(f"请求失败原因: {str(e)}")

现在应该能正常获取响应,返回的IP会是ngrok的公网IP。

额外注意事项

  • 防火墙检查:确保你的本地防火墙没有阻止8899端口的入站请求(不过因为用了ngrok,一般只要允许ngrok和proxy.py的通信即可,默认配置通常没问题)。
  • ngrok协议匹配:如果ngrok生成的是HTTPS链接,需要确保proxy.py支持HTTPS代理,或者调整ngrok转发为HTTP(默认就是HTTP)。

内容的提问来源于stack exchange,提问作者Nakul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:43:11