相关文章推荐
飞奔的生姜  ·  C sharp 将object ...·  2 月前    · 
风流的凳子  ·  GitLab ...·  1 年前    · 
【Python】py3.6请求网站时报错:http.client.RemoteDisconnected: Remote end closed connection without response
最新推荐文章于 2023-04-07 11:25:42 发布
最新推荐文章于 2023-04-07 11:25:42 发布

爬虫代码报错: http.client.RemoteDisconnected: Remote end closed connection without response

原因:服务器限制了User-Agent的访问。

1.什么是user-agent?

有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的身份。此时,我们就可以通过设置User Agent的来达到隐藏身份的目的,User Agent的中文名为用户代理,简称UA。

User Agent存放于Headers中,服务器就是通过查看Headers中的User Agent来判断是谁在访问。在Python中,如果不设置User Agent,程序将使用默认的参数,那么这个User Agent就会有Python的字样,如果服务器检查User Agent,那么没有设置User Agent的Python程序将无法正常访问网站。

Python允许我们修改这个User Agent来模拟浏览器访问,它的强大毋庸置疑。

2. 如何突破限制?

答案是生成随机的User-Agent,即随机从预定义的user-agent中取出一个使用。常见的user-agent列表:

from random import randint
USER_AGENTS = [
 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
 "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
 "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
 "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
 "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
 "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
 "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
    random_agent = USER_AGENTS[randint(0, len(USER_AGENTS)-1)]
    headers = {
        'User-Agent':random_agent,

注意,random.randint()函数的取值是个闭区间[a, b], 也就是b也能取到。

如果这样仍然会报错,那么就要考虑网站是不是封了你的ip。随机ip设置可参考:https://blog.csdn.net/c406495762/article/details/60137956

这里我用的是http协议,请求的url也是http协议 ,这个位置测试网站换成https://blog.csdn.net/lovlu18 协议,它还是可以得到响应,这个因为没有。通俗点来说,就是如果添加了UA之后,问题还没有得到解决,就看一下你请求网站,是不是https,如果是,就改为http试一下,即建议大家使用。大多数网站都会对用户请求中的 User-Agent 进行检测,如果没有在请求头中设置 User-Agent,那么就会抛出异常。遇到这类的问题,在使用 Python 爬虫库中的。 USER_AGENTS = [ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0 根据各位大神的解释是UA(User-Agent)出现问题了, headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'} req = ... import urllib.request # 代码002:(未声明headers,会报错response = urllib.request.urlopen("http://www.baidu.com") print(response) print(response.read()) 运行结果: Traceback (most recent call last): File "D:/PycharmProjects/pythonProject/douban/test1/temp.py" requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',)) 服务器重启后可以正常返回,但是运行 请求网站报错http.client.RemoteDisconnected: Remote end closed connection without response 原因:服务器限制了部分User-Agent的访问 解决方案: 添加User-Agent data = urllib.request.urlopen(url).read().decode("utf-8", "ignore... org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication. at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:317) at org.apache.... 在使用 Python 爬虫库中的 urllib 或者 requests 库获取数据,大多数网站都会对用户请求中的 User-Agent 进行检测,如果没有在请求头中设置 User-Agent,那么就会抛出如下异常: http.client.RemoteDisconnected: Remote end closed connection without response urllib 设置 User-Agent 示例如下: from urllib.request import urlopen, Req 报错信息 ftp上传文件报org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication错误 项目中由于ftp做了迁移,代码使用的ftpclient登录成功,但是上传文件就报这个错误。 public boolean uploadFile(String ip, int port, String username, String password, String s 需要伪装成浏览器 headers = {‘User-Agent’: ‘User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36’} 参考:https://blog.csdn.net/u01053...