代理的基本原理

在做爬虫的过程中经常会遇到一种情况,就是爬虫最初是正常运行、正常抓取数据的,一切看起来都是那么美好,然而一杯茶的工夫就出现了错误,例如 403 Forbidden,这时打开网页一看,可能会看到 “您的 IP 访问频率太高” 这样的提示。出现这种现象是因为网站采取了一些反爬虫措施。例如服务器会检测某个 IP 在单位时间内的请求次数,如果请求次数超过设定的阈值,就直接拒绝提供服务,并返回一些错误信息,可以称这种情况为封 IP。

既然服务器检测的是某个 IP 在单位时间内的请求次数,那么借助某种方式把我们的 IP 伪装一下,让服务器识别不出请求是由我们本机发起的,不就可以成功防止封 IP 了吗?

一种有效的伪装方式是使用代理,后面会详细说明代理的用法。在这之前,需要先了解代理的基本原理,它是怎样实现伪装 IP 的呢?

基本原理

代理实际上就是指代理服务器,英文叫作 ProxyServer,功能是代网络用户取得网络信息。形象点说,代理是网络信息的中转站。当客户端正常请求一个网站时,是把请求发送给了 Web 服务器,Web 服务器再把响应传回给客户端。设置代理服务器,就是在客户端和服务器之间搭建一座桥,此时客户端并非直接向 Web 服务器发起请求,而是把请求发送给代理服务器,然后由代理服务器把请求发送给 Web 服务器,Web 服务器返回的响应也是由代理服务器转发给客户端的。这样客户端同样可以正常访问网页,而且这个过程中 Web 服务器识别出的真实 IP 就不再是客户端的 IP 了,成功实现了 IP 伪装,这就是代理的基本原理。

代理的作用

代理有什么作用呢?我们可以简单列举如下。

  • 突破自身 IP 的访问限制,访问一些平时不能访问的站点。

  • 访问一些单位或团体的内部资源。比如服使用教育网内地址段的免费代理服务器,就可以下载 和上传对教育网开放的各类 FTP 代理也可以查询、共享各类资料等。

  • 提高访问速度。通常,代理服务器会设置一个较大的硬盘缓冲区,当有外界的信息通过时,会同时将其保存到自已的缓冲区中,理当其他用户访问相同的信息时,直接从缓冲区中取出信息,提高了访问速度。

  • 隐藏真实 IP。上网者可以通过代理隐藏自已的 IP,别免受攻击。对于爬虫来说,使用代理就是为了隐藏自身 IP,防止自身的 IP 被封锁。

爬虫代理

对于爬虫来说,由于爬取速度过快,因此在爬取过程中可能会遇到同一个 IP 访问过于频繁的问题,此时网站会让我们输入验证码登录或者直接封锁 IP,这样会给爬取造成极大的不便。

使用代理隐藏真实的 IP,让服务器误以为是代理服务器在请求自已。这样在爬取过程中不断更换 代理,就可以避免 IP 被封锁,达到很好的爬取效果。

代理分类

对代理进行分类时,既可以根据协议,也可以根据代理的匿名程度,这两种分类方式分别总结如下。

  • 根据协议区分

根据代理的协议,代理可以分为如下几类。

  • FTP 代理服务器:主要用于访问 FTP 服务器,一般有上传、下载以及缓存功能,端口一般为 21、 2121等。

  • HTTP 代理服务器:主要用于访问网页,一般有内容过滤和缓存功能,端口一般为 80、8080、 3128等。

  • SSL/TLS 代理:主要用于访问加密网站,一般有 SSL 或 TLS 加密功能(最高支持 128 位加密强度),端口一般为 443。

  • RTSP 代理:主要用于 Realplayer 访问 Real 流媒体服务器,一般有缓存功能,端口一般为 554。

  • Telnet 代理:主要用于 Telnet 远程控制(黑客入侵计算机时常用于隐藏身份),端口一般为 23。

  • POP3/SMTP 代理:主要用于以 POP3/SMTP 方式收发邮件,一般有缓存功能,端口一般为 110/25。

  • SOCKS代理:只是单纯传递数据包,不关心具体协议和用法,所以速度快很多,一般有缓存功能,端口一般为 1080。SOCKS 代理协议文分为 SOCKS4 和 SOCKS5,SOCKS4 协议只支持 TCP,SOCKS5 协议则支持 TCP 和 UDP,还支持各种身份验证机制、服务器端域名解析等。简单来说,SOCKS4 能做到的 SOCKS5 都能做到,但 SOCKS5 能做到的 SOCKS4 不一定做得到。

    • 根据匿名程度区分

根据代理的匿名程度,代理可以分为如下几类。

  • 高度名代理:高度匿名代理会将数据包原封不动地转发,在服务端看来似乎真的是一个普通客户端在访问,记录的 IP 则是代理服务器的 IP。

  • 普通名代理:普通匿名代理会对数据包做一些改动,服务端可能会发现正在访问自已的是个代理服务器,并且有一定概率去追查客户端的真实 IP。这里代理服务器通常会加入的 HTTP 头有 HTTP_VIA 和 HTTP_X_FORWARDED_FOR。

  • 透明代理:透明代理不但改动了数据包,还会告诉服务器客户端的真实 IP。这种代理除了能 用缓存技术提高浏览速度,用内容过滤提高安全性之外,并无其他显著作用,最常见的例子是内网中的硬件防火墙。

  • 间谍代理:间谍代理是由组织或个人创建的代理服务器,用于记录用户传输的数据,然后对记 录的数据进行研究、监控等。

常见代理设置

常见的代理设置如下。

  • 对于网上的免费代理,最好使用高度匿名代理,可以在使用前把所有代理都抓取下来筛选一下可用代理,也可以进一步维护一个代理池。

  • 使用付费代理服务。互联网上存在许多可以付费使用的代理商,质量要比免费代理好很多。

  • ADSL 拨号,拨一次号换一次 IP,稳定性高,也是一种比较有效的封锁解决方案。

  • 蜂窝代理,即用 4G 或 5G 网卡等制作的代理。由于用蜂窝网络作为代理的情形较少,因此整体被封锁的概率会较低,但搭建蜂窝代理的成本是较高的。

在后面,我们会详细介绍一些代理的使用方式。

总结

本文介绍了代理的相关知识,这对后文我们进行一些反爬绕过的实现有很大的帮助,同时也为后文的一些抓包操作打下了基础,需要好好理解。

本节涉及一些专业名词,部分内容参考如下资料。

  • 维基百科上代理服务器相关的内容。

  • 百度百科上代理相关的内容。