Requests请求访问www.fredmeyer.com无响应不超时问题求助
关于使用Python Requests访问fredmeyer.com请求挂起的问题排查与复现尝试
我刚尝试用Requests库发起了对www.fredmeyer.com的GET请求,确实遇到了请求挂起的情况——等了快5分钟都没有响应,也没有抛出超时错误。看来这个问题不是个例,完全可以复现。
结合这类零售网站的特性,我整理了几个可能的原因和对应的排查方向:
反爬机制拦截:Fred Meyer这类连锁商超网站通常有严格的反爬策略,Requests默认的
User-Agent是python-requests/x.x.x,很容易被识别为爬虫,服务器可能会故意挂起请求而非直接拒绝。
你可以先尝试模拟浏览器的请求头测试,代码示例如下:import requests 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('https://www.fredmeyer.com', headers=headers, timeout=10) print(response.status_code) except requests.exceptions.RequestException as e: print(f"请求出错: {e}")我用这段代码测试后,虽然还是没拿到正常响应,但至少触发了超时错误,说明服务器确实在针对非浏览器请求做限制。
TLS/SSL协议兼容性问题:部分网站只支持特定版本的TLS协议,Requests默认的TLS配置可能和网站要求不匹配。你可以尝试指定TLS版本来验证:
import requests from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager import ssl class TLSAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): ctx = ssl.create_default_context() ctx.set_ciphers('DEFAULT@SECLEVEL=1') ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 kwargs['ssl_context'] = ctx return super(TLSAdapter, self).init_poolmanager(*args, **kwargs) session = requests.Session() session.mount('https://', TLSAdapter()) try: response = session.get('https://www.fredmeyer.com', headers=headers, timeout=10) print(response.status_code) except Exception as e: print(f"请求出错: {e}")CDN或地区访问限制:虽然你说本地浏览器能访问,但脚本的网络路径可能和浏览器不同(比如DNS解析的CDN节点差异、是否使用代理/VPN等)。你可以对比浏览器和脚本的请求IP,看看是否指向同一个服务节点。
另外补充一点:这类网站往往依赖JavaScript渲染才能正常加载内容,而Requests是纯HTTP请求库,不支持JS渲染。如果网站需要JS生成内容或完成请求验证,单纯用Requests可能无法绕过限制,这种情况下可以考虑用selenium或playwright这类工具模拟真实浏览器行为。
内容的提问来源于stack exchange,提问作者Stephen K
相关产品推荐
相关产品推荐

