特定URL请求无响应:Python请求代码运行超时如何解决?
解决请求目标URL超时无响应的问题
针对你遇到的请求zozo.jp相关URL长时间无响应的问题,可按以下步骤排查修复:
1. 强制设置请求超时时间
requests.get默认无超时限制,会导致程序无限等待服务器响应。必须添加timeout参数,明确连接超时和读取超时的阈值:
# 示例:连接超时5秒,读取超时10秒 response = requests.get(url, headers=header, timeout=(5, 10))
2. 精准捕获异常,定位问题原因
原代码的except:过于宽泛,无法得知具体错误类型(是超时、连接失败还是被反爬拦截)。改为捕获具体的请求异常:
try: url="http://zozo.jp/shop/bestpackingstore/?price=proper&p_ssy=2015&p_ssm=5&p_ssd=13&p_sey=2015&p_sem=5&p_sed=13&dstk=2" header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} response = requests.get(url, headers=header, timeout=(5, 10)) print(response.text) except requests.exceptions.RequestException as e: print(f"请求出错: {str(e)}") response = ""
3. 应对网站反爬机制
目标网站可能存在反爬策略,可尝试以下调整:
- 更新
User-Agent为当前主流浏览器的标识,避免使用过时版本 - 添加
Referer头,模拟从网站内部跳转的请求:header = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15', 'Referer': 'http://zozo.jp/' } - 使用
requests.Session()保持会话,模拟浏览器的持续连接状态
4. 尝试使用代理IP
如果你的IP被目标网站限制,可通过代理IP发起请求:
proxies = { 'http': 'http://your-proxy-ip:port', 'https': 'https://your-proxy-ip:port' } response = requests.get(url, headers=header, timeout=(5, 10), proxies=proxies)
内容的提问来源于stack exchange,提问作者dragontim
相关产品推荐
相关产品推荐

