使用HttpWebRequest WebClien获取资源
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Net; 6 using System.Runtime.Remoting.Messaging; 7 using System.Text; 8 using System.Threading.Tasks; 9 10 namespace ConsoleApplication1 11 { 12 class Program 13 { 14 static void Main(string[] args) 15 { 16 17 18 WebProxy[] proxys = new WebProxy[20];//设置代理 19 proxys[0] = new WebProxy("69.197.148.18:7808"); 20 proxys[1] = new WebProxy("199.200.120.37:7808"); 21 proxys[2] = new WebProxy("107.182.17.9:7808"); 22 proxys[3] = new WebProxy("104.238.200.211:7808"); 23 proxys[4] = new WebProxy("162.208.49.45:3127"); 24 proxys[5] = new WebProxy("128.199.226.223:3128"); 25 proxys[6] = new WebProxy("167.114.24.220:7808"); 26 string url = @"http://news.youdao.com/?keyfrom=fanyi.top"; 27 Random r = new Random(); 28 int num = r.Next(0, proxys.Length); 29 string html = GetHtml(url, proxys[num]); 30 31 32 } 33 34 35 private static string GetHtml(string url, WebProxy proxy) 36 { 37 38 HttpWebRequest httpRequest = WebRequest.Create(url) as HttpWebRequest;//创建一个对象 39 if (httpRequest == null) return null; 40 httpRequest.Method = "GET";//设置请求方式:GET/POST 41 httpRequest.Timeout = 2000;//设置等待时间(以毫秒为单位) 42 if (proxy != null)//判断代理是否为空(因为如果使用多线程有些网站会限制同一个IP多线程访问的,故需要使用代理斯骗代理网站:http://www.proxz.com) 43 { 44 httpRequest.Proxy = proxy; 45 } 46 47 Stream responseStream; 48 try 49 { 50 System.Net.ServicePointManager.Expect100Continue = false; 51 #region 【http之100-continue】详解 52 // 【http之100-continue】 53 54 //1、http 100-continue用于客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。在现实应用中,通过在POST大数据时,才会使用100-continue协议。 55 56 //2、客户端策略。 57 58 // 1)如果客户端有POST数据要上传,可以考虑使用100-continue协议。加入头{"Expect":"100-continue"} 59 60 // 2)如果没有POST数据,不能使用100-continue协议,因为这会让服务端造成误解。 61 62 // 3)并不是所有的Server都会正确实现100-continue协议,如果Client发送Expect:100-continue消息后,在timeout时间内无响应,Client需要立马上传POST数据。 63 64 // 4)有些Server会错误实现100-continue协议,在不需要此协议时返回100,此时客户端应该忽略。 65 66 //3、服务端策略。 67 68 // 1)正确情况下,收到请求后,返回100或错误码。 69 70 // 2)如果在发送100-continue前收到了POST数据(客户端提前发送POST数据),则不发送100响应码(略去)。 71 #endregion 72 HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();//调用httpRequest对象方向请求服务器url并返回访问资源 73 responseStream = wr.GetResponseStream();//将读到资源存放在responseStream容器中 74 75 if (responseStream != null) 76 { 77 string stringResponse = string.Empty; 78 using (StreamReader responseReader = new StreamReader(responseStream, Encoding.UTF8))//创建读取对象并设定处量的资源responseStream与处理方式Encoding.UTF8 79 { 80 stringResponse = responseReader.ReadToEnd(); 81 } 82 responseStream.Close();// 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 不直接调用此方法,而应确保流得以正确释放。(则释放对应的资源让其他程序使用,否则一直占用) 83 return stringResponse;//反回文本 84 } 85 } 86 catch (Exception ex) 87 { 88 return ex.Message; 89 90 } 91 return null; 92 } 93 94 } 95 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace ConsoleApplication2 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 15 string html= GetTextFromUrl("http://www.cnblogs.com/wiseblog/p/4318833.html", Encoding.UTF8); 16 } 17 18 19 20 21 public static string GetTextFromUrl(string url, Encoding encoding) 22 { 23 if (!string.IsNullOrEmpty(url)) 24 { 25 if (encoding == null) 26 { 27 encoding = Encoding.UTF8; 28 } 29 try 30 { 31 using (WebClient wc = new WebClient()) 32 { 33 GlobalProxySelection.Select = new WebProxy("49.50.96.71:443");//设置代理 34 byte[] arr = wc.DownloadData(url);//调用DownloadData获取资源得玻BYTE数组 35 string result = encoding.GetString(arr);//调用encoding.GetString方法取把数组以指定解码方式UTF8解码成字符串 36 return result;//返回结果 37 } 38 } 39 catch (System.Exception err) 40 { 41 return err.ToString(); 42 } 43 } 44 return null; 45 } 46 } 47 }
using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace 下载图片 { class Program { static void Main(string[] args) { string url = "http://news.youdao.com/?keyfrom=fanyi.top"; string imgUrl = "http://picture.youth.cn/qtdb/201503/t20150306_6507030.htm"; string savePath = @"D:\windowSer\horseService\HTMLTEXT\dd.jpg"; DownImg(url, imgUrl, savePath); Console.ReadKey(); } /// <summary> /// /// </summary> /// <param name="url">请求网页地址</param> /// <param name="imgUrl">下载网页图片地址</param> /// <param name="savePath">保存图片地址(含图片名称)</param> public static void DownImg(string url, string imgUrl, string savePath) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl); request.Referer = url;//设置访问的网页地址(因为有些网页要有相关限制,因些需要告知服务器) WebResponse response = request.GetResponse();//取得请求资源 Stream reader = response.GetResponseStream(); FileStream writer = new FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write); byte[] buff = new byte[512]; int c = 0; //实际读取的字节数 while ((c = reader.Read(buff, 0, buff.Length)) > 0) { writer.Write(buff, 0, c); } writer.Close(); writer.Dispose(); reader.Close(); reader.Dispose(); response.Close(); } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。