使用Python向接收模式私有OnionShare服务器发POST请求遇错求助
问题场景
使用Python脚本尝试向私有OnionShare接收服务器发送数据,代码如下:
import requests s = requests.session() s.proxies['http'] = 'socks5h://127.0.0.1:9060' s.proxies['https'] = 'socks5h://127.0.0.1:9060' print(s.proxies) url = 'http://*redacted*.onion' headers = { 'Content-Type': 'application/json' } data = { 'key':'*redacted*' } try: r = s.post(url, headers=headers, json=data, proxies=s.proxies) print(r.text) except Exception as e: print(e)
执行后持续报错:
SOCKSHTTPConnectionPool(host='*redacted*.onion', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.contrib.socks.SOCKSConnection object at 0x7fdf710c5a50>: Failed to establish a new connection: 0x01: General SOCKS server failure'))
已尝试操作
- 将请求改为GET,错误未解决
- 连接公开洋葱地址(如Facebook洋葱站)成功,curl访问正常
- 修改Tor端口为9060
- 尝试用stem库控制Tor进程,仍出现类似错误
- 将OnionShare设为公开模式后发送GET请求成功,推测问题与私有服务的客户端授权相关
- 在torrc中配置
ClientOnionAuthDir并指定目录,手动创建格式为<不含.onion的洋葱地址>:x25519:<私钥>的.auth_private文件,重启Tor后,notices.log出现:[notice] Fail to decrypt descriptor for requested onion address. It is likely requiring client authorization.
排查与解决方案
1. 修正客户端授权文件配置
Tor日志的解密失败提示,说明授权文件格式或内容存在问题,按以下步骤修正:
- 直接使用服务器生成的授权文件:OnionShare创建私有接收服务时,会生成一个
.onionshare_auth格式的客户端授权文件,无需手动编辑,直接将该文件复制到ClientOnionAuthDir指定的目录下即可。 - 核对文件名与路径:授权文件的文件名必须是洋葱地址前缀(不带
.onion后缀),例如地址为abc123.onion,文件名应为abc123.auth_private,确保Tor能识别对应地址的授权信息。 - 确保Tor权限与重启:Tor进程需要拥有
ClientOnionAuthDir目录及文件的读取权限,修改配置后必须完全重启Tor服务(而非重载配置),确保新的授权规则被加载。
2. 验证OnionShare请求格式
私有模式下,除了授权,还需确认请求是否符合服务器要求:
- 调整Content-Type:OnionShare接收模式默认可能接受
application/x-www-form-urlencoded而非application/json,修改请求代码:headers = { 'Content-Type': 'application/x-www-form-urlencoded' } # 使用data参数而非json参数,让requests自动处理表单编码 r = s.post(url, headers=headers, data=data, proxies=s.proxies) - 核对请求路径:检查私有OnionShare服务的完整地址,部分场景下接收服务的路径并非根路径
/,需确保url包含正确的后缀(如http://xxx.onion/receive)。
3. 进阶排查
- 开启Tor debug日志:在torrc中添加
Log debug file /var/log/tor/debug.log,重启Tor后查看详细日志,定位授权过程中的具体失败点。 - 用curl测试连通性:执行
curl --socks5-hostname 127.0.0.1:9060 http://xxx.onion,若curl也失败,说明问题出在Tor授权配置,与Python代码无关。
内容的提问来源于stack exchange,提问作者Curliness7530
相关产品推荐
相关产品推荐

