分享一个Http代理Get请求(C#)

原创 2017年08月24日 21:11:47

防止目标站点封禁IP,所以使用了一个http代理Get请求,下面上代码



         try
            {
                WebProxy proxyObject = new WebProxy(ip, port);//str为IP地址 port为端口号 代理类
                HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(Url);
                Req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CIBA; InfoPath.2)";
                Req.Proxy = proxyObject; //设置代理 
                Req.Method = "GET";
                Req.Timeout = 15000;
                HttpWebResponse Resp = (HttpWebResponse)Req.GetResponse();
                Encoding code = Encoding.Default;
                using (StreamReader sr = new StreamReader(Resp.GetResponseStream(), code))
                {
                    return sr.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }




什么?您是说您没有代理IP吗?


刚刚百度了一下免费代理IP的网站,然后写下了一个比较简单的爬代理IP的方法,下面上代码


	    List<string[]> IPList = new List<string[]>(); //获取的IP存储方式为 IPList[0][0] = IP, IPList[0][1] = Prot,
	    string[] str;
            var url = Htmlbase.GetHtml("http://www.xicidaili.com/wt/");
            var reg = new Regex("<tr class.+[\r\n].+[\r\n].+[\r\n].+[\r\n]").Matches(url);
            foreach (Match m in reg)
            {
                str = new string[2];
                var ip = new Regex(@"((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)").Match(m.Value).Value;
                var html = new Regex("<td>.+</td>").Matches(m.Value);
                string port = html[1].Value.Replace("</td>", "").Replace("<td>", ""); ;
                str[0] = ip;
                str[1] = port;
                Console.WriteLine(ip);
                foreach (string[] s in IP)
                {
                    if (str[0] == s[0])
                    {
                        continue;
                    }
                }
                IPList.Add(str);
            }


接下来您是不是发现 有一个方法是无效的?请自行百度获取指定页面Html的方法吧~哈哈

玩笑玩笑~至于GetHtml方法参考我的另一篇文章吧,仅供参考你懂的。效果还不错

无视网页编码获取网页的Html


IP爬下来之后,又发现一个问题,有好多IP对于本机或者是目标是无效的,那么下面就使用一个验证代理IP的方法吧,下面上代码


 for (int i = 0; i < IPList.Count; i++)
            {
                var rs = i;
                var ip = $"{IPList[rs][0]}";
                Console.WriteLine(rs);
                var port = Convert.ToInt32(IP[rs][1]);
                try
                {
                    WebProxy proxyObject = new WebProxy(ip, port);//str为IP地址 port为端口号 
                    HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("目标URL或者IP");
                    Req.Proxy = proxyObject; //设置代理 
                    Req.Method = "GET";
                    Req.Timeout = 4000;
                    HttpWebResponse Resp = (HttpWebResponse)Req.GetResponse();
                    Encoding code = Encoding.Default;
                    using (StreamReader sr = new StreamReader(Resp.GetResponseStream(), code))
                    {
                        Console.WriteLine($"IP可用 {ip}");
                        StreamWriter str = new StreamWriter("IP.txt", true);
                        str.WriteLine($"{ip}:{port}");
                        str.Close();
                    }
                }
                catch
                {
                    Console.WriteLine(ip + " 失效,删除");
                    IP.Remove(IP[rs]);
                }
            }

嗯,这样子就完美了,程序仅提供一个思路,欢迎您拿去使用



版权声明:本文为博主原创文章,未经博主允许不得转载。

[GO]HTTP 请求实例(GET)以及设置代理

GO语言在Bee框架下的应用,前台Ajax的后台HTTP请求
  • zjgdtl
  • zjgdtl
  • 2015年01月20日 20:18
  • 1272

C# Get方式请求Http

rivate static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;...
  • KHFlash
  • KHFlash
  • 2017年02月26日 00:39
  • 288

C#通过GET/POST方式发送Http请求

介绍http请求的两种方式,get和post方式。并用C#语言实现,如何请求url并获取返回的数据两者的区别: 参数Get请求把提交的数据进行简单编码,同时将url的一部分发送到服务器 比如url...
  • mrli113
  • mrli113
  • 2016年11月17日 15:22
  • 10775

C#通过发送 http 请求调用接口之Get

1.实现车辆信息查询接口 (1)描述 本接口提供指定车牌号,车牌颜色的车辆信息查询。 接口调用示例: 待加密格式 type=queryVehicleReq&user=test&pwd=tes...
  • u010678947
  • u010678947
  • 2014年07月31日 10:27
  • 2139

C#模拟http 发送POST或GET请求

1、POST:   private string HttpPost(string Url, string postDataStr, CookieCollection cookies)       ...
  • zondy_yuren
  • zondy_yuren
  • 2017年03月01日 10:44
  • 930

C#发送Get请求(带参数)

1.简单发送Get请求 /// /// 指定Url地址使用Get 方式获取全部字符串 /// /// 请求链接地址 /// public static string Get(string ur...
  • u011127019
  • u011127019
  • 2016年11月03日 14:29
  • 4011

C#异步Get和Post请求

一、get请求         ///         /// 异步GET请求,         ///         ///           ///         publ...
  • zhangtao_who
  • zhangtao_who
  • 2017年03月30日 13:56
  • 991

[Asp.Net]WebService通过URL直接GET请求

WebService可以有Get、Post、Soap、Document四种方式调用,以下是四种方式的参照说明。 name 属性 说明 HttpGet 添加HTTP GET协议 在追加到HTTP请求U...
  • cyb331
  • cyb331
  • 2012年11月19日 13:48
  • 7619

FTP 通过Proxy Upload 文件(Donot Support FTP server when behind an HTTP proxy)

//利用ftpwebrequest获取输入流,然后往这个流里写要上传的文件。 需要引用system.net空间         string filePath = "f:\\Svr_2008w_SP...
  • windren06
  • windren06
  • 2013年11月16日 13:09
  • 2091

java使用代理发送http请求

最近公司需要去XXX网站爬取某些分类下的商铺信息,访问速率过快的时候容易被站点查封本机IP,要求输入验证码,不得已采用代理IP机制来访问。出于公司机密考虑,IP给屏蔽了,大家可以自己去网上找代理IP来...
  • FX_SKY
  • FX_SKY
  • 2013年03月05日 20:05
  • 5633
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分享一个Http代理Get请求(C#)
举报原因:
原因补充:

(最多只允许输入30个字)