Python调用BridgeDB /moat/fetch接口请求obfs4网桥失败
解决BridgeDB MOAT接口返回415 Unsupported Media Type错误
你的请求返回415错误的核心原因是Content-Type请求头不符合MOAT接口的要求——该接口不接受通用的application/json或application/x-www-form-urlencoded,必须使用自定义媒体类型application/vnd.moat+json。
修正后的Python代码
import requests MOAT_SERVER_URL = "https://bridges.torproject.org" def request_bridges(): transports = ["obfs4"] payload = { "data": [{ "version": "0.1.0", "type": "client-transports", "supported": transports, }] } # 关键修改:替换为MOAT接口要求的Content-Type headers = { "Content-Type": "application/vnd.moat+json" } try: response = requests.post(f"{MOAT_SERVER_URL}/moat/fetch", json=payload, headers=headers) response.raise_for_status() json_data = response.json() if "data" in json_data and json_data["data"]: moat_data = json_data["data"][0] if "challenge" in moat_data: # 这里添加验证码处理逻辑,比如解析验证码图片、获取用户输入 print("需要验证码验证,挑战信息:", moat_data["challenge"]) else: print("成功获取网桥:", moat_data) elif "errors" in json_data: print("接口返回错误:", json_data["errors"]) except requests.exceptions.RequestException as e: print("请求失败:", str(e)) request_bridges()
修正后的Curl命令
curl -X POST -H "Content-Type: application/vnd.moat+json" -d '{"data": [{"version": "0.1.0", "type": "client-transports", "supported": ["obfs4"]}]}' https://bridges.torproject.org/moat/fetch
补充说明
- MOAT接口使用自定义媒体类型是为了过滤非标准客户端请求,确保只有符合Tor网桥申请规范的请求能被处理。
- 修正后请求会返回包含验证码挑战的响应,后续你需要实现验证码提交逻辑:将用户输入的验证码和challenge中的相关参数一起提交到MOAT接口,才能获取到obfs4网桥地址。
内容的提问来源于stack exchange,提问作者TN3W
相关产品推荐
相关产品推荐

