码迷,mamicode.com
首页 > Web开发 > 详细

使用HttpWebRequest WebClien获取资源

时间:2015-03-06 18:58:24      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

技术分享1.0
 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 }
使用HttpWebRequest获取资源(可设置代理)
技术分享
 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 }
WebClient获取资源
技术分享HttpWebRequest
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();

        }
    }
}
下载图片

 

使用HttpWebRequest WebClien获取资源

标签:

原文地址:http://www.cnblogs.com/wiseblog/p/4318833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!