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

使用Python向接收模式私有OnionShare服务器发POST请求遇错求助

解决私有OnionShare接收服务器的SOCKS连接失败问题

问题场景

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:19:51