网络爬虫都知道,ip是上网需要唯一的身份地址,代理ip就是我们上网过程中的一个中间协议。是由你的电脑先访问代理ip,之后再由代理ip访问你点开的页面,所以在这个页面的访问记录里留下的是就是代理ip的地址,不是本机IP被记录,这样下来访问,对自己的个人信息就能完全得到保护。
互联网发展迅速,网络爬虫使用HTTP代理也多了起来,HTTP代理更是成为了网络爬虫工作中不可缺少的一部分。
那如何选择适合自己的代理IP呢?代理IP有许多种类,有透明代理IP、普通匿名代理IP和高匿名代理IP三种,当然顾名思义,亿牛云的隧道转发爬虫代理加强版高匿代理最好用,也是效果最好的。如果要选择适合自己的业务的,当然选择高匿代理优质代理。为什么不建议使用透明代理和普通代理呢?使用透明代理,就相当于你在访问目标网站采集数据的时候,目标服务器根本就不知道你是用代理IP去访问的,会记录你本机IP去访问,这样长期下来,你的本机IP一样会被封,而且效果也不好。简单来说,网络爬虫使用透明代理,但是目标服务器还是能查出你的本机IP。为什么不建议使用普匿代理。普匿代理,比透明代理高级一点,网络爬虫使用了普通匿名代理,虽然能隐藏你的本机IP,但是目标服务器会明确的知道你使用了代理IP去访问,长期下来一样会被限制封禁。所以一般的网络爬虫都会选择使用优质代理或者隧道转发的爬虫代理加强版。
// 要访问的目标页面
string targetUrl = "http://httpbin.org/ip";
// 代理服务器(产品官网 www.16yun.cn)
string proxyHost = "http://t.16yun.cn";
string proxyPort = "31111";
// 代理验证信息
string proxyUser = "username";
string proxyPass = "password";
// 设置代理服务器
WebProxy proxy = new WebProxy(string.Format("{0}:{1}", proxyHost, proxyPort), true);
ServicePointManager.Expect100Continue = false;
var request = WebRequest.Create(targetUrl) as HttpWebRequest;
request.AllowAutoRedirect = true;
request.KeepAlive = true;
request.Method = "GET";
request.Proxy = proxy;
//request.Proxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy.Credentials = new System.Net.NetworkCredential(proxyUser, proxyPass);
// 设置Proxy Tunnel
// Random ran=new Random();
// int tunnel =ran.Next(1,10000);
// request.Headers.Add("Proxy-Tunnel", String.valueOf(tunnel));
//request.Timeout = 20000;
//request.ServicePoint.ConnectionLimit = 512;
//request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36";
//request.Headers.Add("Cache-Control", "max-age=0");
//request.Headers.Add("DNT", "1");
//String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(proxyUser + ":" + proxyPass));
//request.Headers.Add("Proxy-Authorization", "Basic " + encoded);
using (var response = request.GetResponse() as HttpWebResponse)
using (var sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string htmlStr = sr.ReadToEnd();
}