在Web数据采集中为了避免被服务器封锁而通过代理下载的情况很常见。但是,并非所有的代理都适合于Web数据采集。下面是鲲鹏数据的技术人员给出的说明。

根据HTTP代理的匿名性可以将其分为以下几种:

 
1. 透明代理(Transparent Proxies)
目标服务器能够检测到真实的源IP。
 
目标服务器根据HTTP请求头进行检测,判断依据:
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 通常为代理服务器 IP(或代理软件名称,也可能无此头)
HTTP_X_FORWARDED_FOR = 真实源IP(不用代理时,无此头或值为空)
PS:该类型代理不适合用于Web数据采集。
 
2. (普通)匿名代理(Anonymous Proxies)
目标服务器无法检测到真实的源IP,但能够检测到使用了代理。
 
检测依据:
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 通常为代理服务器 IP(或代理软件名称,也可能无此头)
HTTP_X_FORWARDED_FOR = 代理服务器 IP(知道你使用了代理,但无法得知真实源IP)
PS:该类型代理可以用于Web数据采集,但有被检测到的风险。
 
3. 高匿名代理(High Anonymity Proxies -Elite proxies
目标服务器无法检测到你在是使用代理。
 
检测依据:
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 值为空或无此头
HTTP_X_FORWARDED_FOR = 没数值或无此头
PS:该类型的代理非常适合用户Web数据采集。鲲鹏数据的付费代理方案提供的全部为高匿名类型的代理。
 
另外,不使用代理时发出的头:
REMOTE_ADDR =真实源 IP
HTTP_VIA = 值为空或无此头
HTTP_X_FORWARDED_FOR = 没数值或无此头
 
不过,在检测严格的情况下,即使没有HTTP_VIA头和HTTP_X_FORWARDED_FOR头,如果存在HTTP_PROXY_CONNECTION头,会被认为在使用普通匿名代理。
 
我们提供了一个代理类型检测接口,在浏览器中访问该接口即可显示出你当前使用的代理类型(如下图):
 

哪种代理适合用于Web数据采集的更多相关文章

  1. Yeoman:适合现代Web应用的现代工作流

    Yeoman:适合现代Web应用的现代工作流   Yeoman是Google的团队和外部贡献者团队合作开发的,他的目标是通过Grunt(一个用于开发任务自动化的命令行工具)和Bower(一个HTML. ...

  2. squid 三种代理实验

    squid 软件既可以做代理,也可以做实现缓存加速,大大降低服务器的I/O.. 1.其中squid代理分为三种,正向代理.透明代理.反向代理. (1)squid正向代理和squid透明代理都位客户端: ...

  3. At.js – 用于 Web 应用程序的自动完成库

    At.js 是一个自动完成库,用来实现自动完成提示,表情等,就像你在 Github 或 Twitter 上看到的一样.它支持 HTML5 contentEditable 元素.你可以听任何字符,而不仅 ...

  4. 10个用于Web开发的最好 Python 框架

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  5. Java的三种代理模式简述

    本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...

  6. 理解java的三种代理模式

    代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class ...

  7. 基于redis的分布式锁(不适合用于生产环境)

    基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...

  8. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情7. 安装 PHP PHP 是用于 web 基础服务的服务器端脚本语言。它也经常被用作通用编程语言。在最小化安装的 CentOS 中安

    CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...

  9. Spring-Aop的两种代理方式

    Spring-Aop两种代理方式: 1.JDK动态代理:用于目标类实现了接口: 2.Cglib动态代理:用于目标类没有实现接口: spring会依据目标类是否实现接口来选择使用哪种代理方式(目标类:相 ...

随机推荐

  1. 【搜索】bzoj3109 [cqoi2013]新数独

    搜索,没什么好说的.要注意读入. Code: #include<cstdio> #include<cstdlib> using namespace std; ][]= {{,, ...

  2. Java字节码文件结构---概述

    一.Class文件的结构概述: 是一连串的字节流(以自节为基本单位划分),里面包含的数据项按照固定的次序依次排列组成Class文件,文件内部不含分割符 当数据项的长度大于1B时候,按照高位在前的方式存 ...

  3. 【OpenJudge9277】【递推】Logs Stacking堆木头

    Logs Stacking堆木头 总时间限制: 1000ms 内存限制: 131072kB [描述] Daxinganling produces a lot of timber. Before loa ...

  4. django --01 helloworld样例入门

    很好的一个django教程:https://www.w3cschool.cn/django/django-first-app.html django版本:1.8 1.创建django工程 django ...

  5. redis节点管理-新增从节点

    原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg12.html 新增从节点 新增一个节点7008节点,使用add-node --slave命令. [pl ...

  6. mormot日志

    mormot日志 usesSynLog; if log = nil then // 日志 begin log := TSynLog.Add; log.Family.DestinationPath := ...

  7. laravel的 array 函数

    代码如下:  routes.php文件 // 获⃣取⃣数⃣组⃣的⃣第⃣一⃣个⃣ Route::get('/helper', function () { $arr = [1, 2, 4]; return ...

  8. jquer回显选中select下拉框

    公司使用的框架比较旧,没有使用el等表达式. <% String context = request.getContextPath(); String index = (String)reque ...

  9. 在JAVA中,如何计算两个日期的月份差

    package com.forezp.util; import org.joda.time.DateTime; import org.joda.time.Months; import org.joda ...

  10. 在执行migrate的时候出现问题(错误见末尾): django.db.utils.OperationalError: (1045, "Access denied for user ‘ODBC‘@‘localho st‘ (using password: YES)")

    Python框架之Django的数据库 在执行migrate的时候出现问题(错误见末尾) django.db.utils.OperationalError: (1045, "Access d ...