使用requests.get()请求网站报错‘Remote end closed connection without response’的解决方法
解决requests访问ldoceonline.com被拦截的问题
这个情况我碰到过,网站肯定是把你的请求当成爬虫给拦了——毕竟默认的requests请求头太“老实”了,一眼就能看出来是程序在访问,而不是真实浏览器。试试下面这几个方法,大概率能解决:
1. 伪装浏览器请求头
网站通常会检查User-Agent字段,默认的requests请求头是类似python-requests/2.31.0这种,直接暴露了你是爬虫。你需要把这个字段改成真实浏览器的标识,比如Chrome的:
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.ldoceonline.com/', headers=headers) response.raise_for_status() # 如果响应状态码是4xx/5xx,直接抛出异常 print("请求成功!") except requests.exceptions.RequestException as e: print(f"请求出错: {e}")
2. 用会话维持请求状态
有些网站会通过Cookie跟踪会话状态,单独的get请求可能会被认为是异常访问。用requests.Session()可以帮你维持会话,模拟浏览器的持续访问状态:
import requests session = requests.Session() # 给会话设置统一的请求头 session.headers.update({ '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 = session.get('https://www.ldoceonline.com/') response.raise_for_status() print("请求成功!") except requests.exceptions.RequestException as e: print(f"请求出错: {e}")
3. 控制请求频率,避免被封IP
就算伪装了请求头,短时间内频繁请求也会触发反爬机制。记得在请求之间加个延迟,比如用time.sleep():
import requests import time session = requests.Session() session.headers.update({ '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 = session.get('https://www.ldoceonline.com/') response.raise_for_status() print("请求成功!") time.sleep(2) # 每次请求后等待2秒 except requests.exceptions.RequestException as e: print(f"请求出错: {e}")
额外提醒
- 先看看网站的
robots.txt(访问https://www.ldoceonline.com/robots.txt),确认哪些内容允许抓取,遵守爬虫规范。 - 如果还是不行,可能需要处理更复杂的反爬机制(比如验证码、JS渲染),这时候可能需要用
Selenium或者Playwright这类工具模拟真实浏览器操作,但尽量先从简单的请求头伪装开始尝试。
内容的提问来源于stack exchange,提问作者lilpig
相关产品推荐
相关产品推荐

