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

Python发送POST请求失败:脚本冻结且报Socket错误求助

排查POST请求脚本冻结问题

看起来你的脚本卡在了等待服务器响应的环节,这种情况通常和网络连通性、服务器状态或者请求配置有关,咱们一步步来排查:

1. 先确认服务器是否正常可达

首先得验证http://localhost:3000/oauth2/token这个端点是不是真的能正常响应。你可以试试用curl命令测试:

curl -X POST http://localhost:3000/oauth2/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=ClientCredentialsClient&client_secret=Ultrasecretstuff"

如果curl也卡住没响应,那问题大概率出在服务器端——比如服务没启动、端口配置错了,或者服务器处理请求时发生了死锁。

2. 给请求添加超时时间

requests库默认没有超时限制,这就意味着如果服务器不返回响应,你的脚本会无限挂着。赶紧给post请求加上timeout参数,比如设置10秒超时:

r = requests.post(url, data=data, headers=headers, timeout=10)

这样即使服务器没响应,脚本也会在10秒后抛出超时错误,不会一直冻结,还能帮你定位问题类型。

3. 检查Authorization头的格式

你当前的Authorization: 'auth'明显不符合规范。对于client_credentials模式,绝大多数OAuth2服务要求使用Basic认证格式:把client_id和client_secret用冒号拼接,再做Base64编码。修正后的代码应该是这样:

import requests
import base64

url = "http://localhost:3000/oauth2/token"
data = {'grant_type': 'client_credentials', 'client_id': 'ClientCredentialsClient', 'client_secret': 'Ultrasecretstuff'}

# 生成正确的Basic认证头
auth_str = f"{data['client_id']}:{data['client_secret']}"
auth_base64 = base64.b64encode(auth_str.encode('utf-8')).decode('utf-8')
headers = {'Content-type': 'application/x-www-form-urlencoded', 'Authorization': f'Basic {auth_base64}'}

# 添加超时
r = requests.post(url, data=data, headers=headers, timeout=10)
print(r.status_code)
print(r.json())

如果服务器期望Basic认证,你之前的无效头会导致服务器无法处理请求,进而让脚本一直等待响应。

4. 验证请求参数的正确性

再核对下data里的参数:grant_type是不是client_credentials(拼写别错),client_id和client_secret是不是和服务器配置的完全一致。参数错误有时候会导致服务器静默无响应,而不是返回错误码。

5. 考虑升级Python版本

你用的是Python2.7,这个版本已经停止维护好几年了,配套的requests旧版本可能存在一些兼容性bug。如果条件允许,升级到Python3.8+,再安装最新版的requests(pip install --upgrade requests),说不定能解决一些隐藏的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:34:22