【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...