背景
之前一直疑惑爬虫使用IP代理的原理, 今天正好有时间,系统了解IP代理的基本原理
定义
当客户端对服务器端提出请求时,此请求会被送到代理服务器,代理服务器转发用户请求到 实际服务器端。
即传输方式为 client ——-> proxy_server ——> real_server
使用方式
bash 下curl 使用
1 |
|
php 的curl使用代理服务器:
1 |
|
寻找IP代理服务器
大量网站提供免费IP代理,但是不稳定, 所以这些网站还会提供一些付费服务, 类似网站有
代理服务器区别
代理类型一共能分为四种:透明代理、匿名代理、高匿代理、混淆代理
安全程度:高匿->混淆->匿名->透明
代理类型主要取决于代理服务器端的配置。不同配置会形成不同的代理类型(后续章节会使用squid进行实际演练操作),
代理类型区别, 主要是服务器端接收的
REMOTE_ADDR
, HTTP_VIA
,HTTP_X_FORWARDED_FOR
来共同决定
REMOTE_ADDR:
REMOTE_ADDR
表示客户端的IP
,但是它的值不是由客户端提供的,而是服务器根据客户端的 IP 指定的。如果使用浏览器直接访问某个网站,那么网站的web
服务器(Nginx、Apache等)就会把REMOTE_ADDR
设为客户端的IP
地址。我们给浏览器设置代理,我们访问目标网站的请求会先经过代理服务器,然后由代理服务器将请求转化到目标网站。那么网站的 web 服务器就会把 REMOTE_ADDR 设为代理服务器的IP
。
X-Forwarded-For(XFF):
X-Forwarded-For是一个HTTP
扩展头部,用来表示HTTP
请求端真实 IP。当客户端使用了代理时,web 服务器就不知道客户端的真实IP
地址。为了避免这个情况,代理服务器通常会增加一个 X-Forwarded-For 的头信息,把客户端的 IP 添加到头信息里面。X-Forwarded-For 请求头格式如下:
1 |
|
HTTP_VIA
via
是HTTP
协议里面的一个header,记录了一次HTTP
请求所经过的代理和网关,经过1个代理服务器,就添加一个代理服务器的信息,经过2个就添加2个。
代理类型之透明代理(Transparent Proxy):
对应的参数类型设定如下:
1 |
|
透明代理虽然可以直接“隐藏”客户端的IP
地址,但是还是可以从HTTP_X_FORWARDED_FOR
来查到客户端的IP
地址。
代理类型之匿名代理(Anonymous Proxy):
1 |
|
匿名代理能提供隐藏客户端 IP 地址的功能。使用匿名代理,服务器能知道客户端使用用了代理,但无法知道客户端真实 IP 地址。
代理类型之混淆代理(Distorting Proxy):
1 |
|
与匿名代理的原理相似,但是会伪装得更逼真。如果客户端使用了混淆代理,服务器还是能知道客户端在使用代理,但是会得到一个假的客户端 IP 地址。
代理类型之高匿代理(Elite Proxy 或 High Anonymity Proxy):
1 |
|
高匿代理既能让服务器不清楚客户端是否在使用代理,也能保证服务器获取不到客户端的真实 IP
地址。
综上所属, 高匿代理 会伪装成正常IP请求, 是最优方案。
PHP实现 代理方式
1 |
|
搭建自己的IP代理服务器
咨询公司内小伙伴, 确认公司IP代理使用两种方式,一种是自由的IP代理池, 一种是买的IP代理服务。 如果想使用免费IP代理, 就需要自己搭建IP代理池。找到一个golang的实现
https://github.com/henson/proxypool
其他
如果想抓取特殊网页, 需要使用PhantomJS
, webdirver
方式。后续详细讲解