GET请求在Postman正常但Python代码报错ConnectionResetError(10054)
解决Python requests访问https://www.rfi.fr/cn/时的ConnectionResetError问题
出现这个错误的核心原因是网站服务器对请求的客户端标识做了拦截——Postman默认的请求头(尤其是User-Agent)被服务器认可,但Python requests库默认的User-Agent过于简单,直接被服务器拒绝连接了。
下面是可行的解决方案:
1. 添加模拟浏览器的请求头
给requests.get()方法带上模拟浏览器的请求头,重点设置User-Agent字段,让服务器认为你是正常的浏览器访问:
import requests url = "https://www.rfi.fr/cn/" # 模拟Chrome浏览器的请求头,也可以换成其他主流浏览器的UA headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } try: response = requests.get(url, headers=headers) response.raise_for_status() # 检查请求是否成功 # 这里可以根据页面结构解析新闻内容,比如结合BeautifulSoup print(response.text[:500]) # 打印前500个字符验证请求成功 except requests.exceptions.RequestException as e: print(f"请求出错: {e}")
2. 额外优化建议
- 如果还是出现连接问题,可以补充更多请求头字段,模拟更完整的浏览器请求:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3" } - 若存在地区访问限制,可配置对应代理(根据实际网络环境调整):
proxies = { "http": "http://your-proxy:port", "https": "https://your-proxy:port" } response = requests.get(url, headers=headers, proxies=proxies) - 使用
requests.Session()保持会话状态,模拟浏览器的持续连接,提升请求成功率:session = requests.Session() session.headers.update(headers) response = session.get(url)
内容的提问来源于stack exchange,提问作者heyyoway
相关产品推荐
相关产品推荐

