zoukankan      html  css  js  c++  java
  • HttpWebRequest的使用

    HttpWebRequest类主要利用HTTP 协议和服务器交互,通常是通过 GET 和 POST 两种方式来对数据进行获取和提交。下面对这两种方式进行一下说明:

    GET 方式

    GET 方式通过在网络地址附加参数来完成数据的提交,比如在地址 http://www.studyofnet.com/?hl=zh-CN 中,前面部分 http://www.studyofnet.com表示数据提交的网址,后面部分 hl=zh-CN 表示附加的参数,其中 hl 表示一个键(key), zh-CN 表示这个键对应的值(value)。

    程序代码如下:  

    C# 代码   复制
      HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.studyofnet.com?hl=zh-CN" );
    
    req.Method = "GET";
    
    using (WebResponse wr = req.GetResponse())
    
    {
    //在这里对接收到的页面内容进行处理
    }
    

    使用 GET 方式提交中文数据。

    GET 方式通过在网络地址中附加参数来完成数据提交,对于中文的编码,常用的有 gb2312 和 utf8 两种。

    用 gb2312 方式编码访问的程序代码如下:

     
    C# 代码   复制
    Encoding myEncoding = Encoding.GetEncoding("gb2312");
    
    string address = "http://www.studyofnet.com/?" + HttpUtility.UrlEncode("参数一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding);
    
    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
    
    req.Method = "GET";
    
    using (WebResponse wr = req.GetResponse())
    
    {
    //在这里对接收到的页面内容进行处理
    }
    

    在上面的程序代码中,我们以 GET 方式访问了网址 http://www.studyofnet.com ,传递了参数“参数一=值一”,由于无法告知对方提交数据的编码类型,所以编码方式要以对方的网站为标准。

     

    POST 方式

    POST 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和 GET 方式一样,是类似于 hl=zh-CN&newwindow=1 这样的结构。

    程序代码如下:

     
    C# 代码   复制
    string param = "hl=zh-CN&newwindow=1";
    
    byte[] bs = Encoding.ASCII.GetBytes(param);
    
    HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.studyofnet.com/" );
    
    req.Method = "POST";
    
    req.ContentType = "application/x-www-form-urlencoded";
    
    req.ContentLength = bs.Length;
    
    using (Stream reqStream = req.GetRequestStream())
    
    {
       reqStream.Write(bs, 0, bs.Length);
    }
    using (WebResponse wr = req.GetResponse())
    {
       //在这里对接收到的页面内容进行处理
    } 
     
    

    在上面的代码中,我们访问了 http://www.studyofnet.com 的网址,分别以 GET 和 POST 方式提交了数据,并接收了返回的页面内容。然而,如果提交的参数中含有中文,那么这样的处理是不够的,需要对其进行编码,让对方网站能够识别。  

    使用 POST 方式提交中文数据

    POST 方式通过在页面内容中填写参数的方法来完成数据的提交,由于提交的参数中可以说明使用的编码方式,所以理论上能获得更大的兼容性。

    用 gb2312 方式编码访问的程序代码如下:  

    C# 代码   复制
     Encoding myEncoding = Encoding.GetEncoding("gb2312");
    
    string param = HttpUtility.UrlEncode("参数一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding) + "&" + HttpUtility.UrlEncode("参数二", myEncoding) + "=" + HttpUtility.UrlEncode("值二", myEncoding);
    
    byte[] postBytes = Encoding.ASCII.GetBytes(param);
    
    HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.studyofnet.com/" );
    
    req.Method = "POST";
    
    req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
    
    req.ContentLength = postBytes.Length;
    
    using (Stream reqStream = req.GetRequestStream())
    
    {
       reqStream.Write(bs, 0, bs.Length);
    }
    using (WebResponse wr = req.GetResponse())
    {
       //在这里对接收到的页面内容进行处理
    } 
    

    从上面的代码可以看出, POST 中文数据的时候,先使用 UrlEncode 方法将中文字符转换为编码后的 ASCII 码,然后提交到服务器,提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。  

    用C#语言写的关于HttpWebRequest 类的使用方法

     
    C# 代码   复制
    using System;
    
    using System.Collections.Generic;
    
    using System.IO;
    
    using System.Net;
    
    using System.Text;
    
    namespace HttpWeb
    
    {
        /// <summary> 
        ///  Http操作类 
        /// </summary> 
        public static class httptest
        {
            /// <summary> 
            ///  获取网址HTML 
            /// </summary> 
            /// <param name="URL">网址 </param> 
            /// <returns> </returns> 
            public static string GetHtml(string URL)
            {
                WebRequest wrt;
                wrt = WebRequest.Create(URL);
                wrt.Credentials = CredentialCache.DefaultCredentials;
                WebResponse wrp;
                wrp = wrt.GetResponse();
                string reader = new StreamReader(wrp.GetResponseStream(), Encoding.GetEncoding("gb2312")).ReadToEnd();
                try
                {
                    wrt.GetResponse().Close();
                }
                catch (WebException ex)
                {
                    throw ex;
                }
                return reader;
            }
            /// <summary> 
            /// 获取网站cookie 
            /// </summary> 
            /// <param name="URL">网址 </param> 
            /// <param name="cookie">cookie </param> 
            /// <returns> </returns> 
            public static string GetHtml(string URL, out string cookie)
            {
                WebRequest wrt;
                wrt = WebRequest.Create(URL);
                wrt.Credentials = CredentialCache.DefaultCredentials;
                WebResponse wrp;
    
                wrp = wrt.GetResponse();
    
    
                string html = new StreamReader(wrp.GetResponseStream(), Encoding.GetEncoding("gb2312")).ReadToEnd();
    
                try
                {
                    wrt.GetResponse().Close();
                }
                catch (WebException ex)
                {
                    throw ex;
                }
    
                cookie = wrp.Headers.Get("Set-Cookie");
                return html;
            }
            public static string GetHtml(string URL, string postData, string cookie, out string header, string server)
            {
                return GetHtml(server, URL, postData, cookie, out header);
            }
            public static string GetHtml(string server, string URL, string postData, string cookie, out string header)
            {
                byte[] byteRequest = Encoding.GetEncoding("gb2312").GetBytes(postData);
                return GetHtml(server, URL, byteRequest, cookie, out header);
            }
            public static string GetHtml(string server, string URL, byte[] byteRequest, string cookie, out string header)
            {
                byte[] bytes = GetHtmlByBytes(server, URL, byteRequest, cookie, out header);
                Stream getStream = new MemoryStream(bytes);
                StreamReader streamReader = new StreamReader(getStream, Encoding.GetEncoding("gb2312"));
                string getString = streamReader.ReadToEnd();
                streamReader.Close();
                getStream.Close();
                return getString;
            }
    
            /// <summary> 
            /// Post模式浏览 
            /// </summary> 
            /// <param name="server">服务器地址 </param> 
            /// <param name="URL">网址 </param> 
            /// <param name="byteRequest">流 </param> 
            /// <param name="cookie">cookie </param> 
            /// <param name="header">句柄 </param> 
            /// <returns> </returns> 
            public static byte[] GetHtmlByBytes(string server, string URL, byte[] byteRequest, string cookie, out string header)
            {
                long contentLength;
                HttpWebRequest httpWebRequest;
                HttpWebResponse webResponse;
                Stream getStream;
    
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
                CookieContainer co = new CookieContainer();
                co.SetCookies(new Uri(server), cookie);
    
                httpWebRequest.CookieContainer = co;
    
                httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                httpWebRequest.Accept =
                    "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                httpWebRequest.Referer = server;
                httpWebRequest.UserAgent =
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)";
                httpWebRequest.Method = "Post";
                httpWebRequest.ContentLength = byteRequest.Length;
                Stream stream;
                stream = httpWebRequest.GetRequestStream();
                stream.Write(byteRequest, 0, byteRequest.Length);
                stream.Close();
                webResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                header = webResponse.Headers.ToString();
                getStream = webResponse.GetResponseStream();
                contentLength = webResponse.ContentLength;
    
                byte[] outBytes = new byte[contentLength];
                outBytes = ReadFully(getStream);
                getStream.Close();
                return outBytes;
            }
            public static byte[] ReadFully(Stream stream)
            {
                byte[] buffer = new byte[128];
                using (MemoryStream ms = new MemoryStream())
                {
                    while (true)
                    {
                        int read = stream.Read(buffer, 0, buffer.Length);
                        if (read <= 0)
                            return ms.ToArray();
                        ms.Write(buffer, 0, read);
                    }
                }
            }
    
            /// <summary> 
            /// Get模式 
            /// </summary> 
            /// <param name="URL">网址 </param> 
            /// <param name="cookie">cookies </param> 
            /// <param name="header">句柄 </param> 
            /// <param name="server">服务器 </param> 
            /// <param name="val">服务器 </param> 
            /// <returns> </returns> 
            public static string GetHtml(string URL, string cookie, out string header, string server)
            {
                return GetHtml(URL, cookie, out header, server, "");
            }
            /// <summary> 
            /// Get模式浏览 
            /// </summary> 
            /// <param name="URL">Get网址 </param> 
            /// <param name="cookie">cookie </param> 
            /// <param name="header">句柄 </param> 
            /// <param name="server">服务器地址 </param> 
            /// <param name="val"> </param> 
            /// <returns> </returns> 
            public static string GetHtml(string URL, string cookie, out string header, string server, string val)
            {
                HttpWebRequest httpWebRequest;
                HttpWebResponse webResponse;
                Stream getStream;
                StreamReader streamReader;
                string getString = "";
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
                httpWebRequest.Accept = "*/*";
                httpWebRequest.Referer = server;
                CookieContainer co = new CookieContainer();
                co.SetCookies(new Uri(server), cookie);
                httpWebRequest.CookieContainer = co;
                httpWebRequest.UserAgent =
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)";
                httpWebRequest.Method = "GET";
                webResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                header = webResponse.Headers.ToString();
                getStream = webResponse.GetResponseStream();
                streamReader = new StreamReader(getStream, Encoding.GetEncoding("gb2312"));
                getString = streamReader.ReadToEnd();
    
                streamReader.Close();
                getStream.Close();
                return getString;
            }
       }
    }
    

     

  • 相关阅读:
    MDX Step by Step 读书笔记(六) Building Complex Sets (复杂集合的处理) Filtering Sets
    在 Visual Studio 2012 开发 SSIS,SSAS,SSRS BI 项目
    微软BI 之SSIS 系列 在 SSIS 中读取 SharePoint List
    MDX Step by Step 读书笔记(五) Working with Expressions (MDX 表达式) Infinite Recursion 和 SOLVE_ORDER 原理解析
    MDX Step by Step 读书笔记(五) Working with Expressions (MDX 表达式)
    使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 图文教程
    MDX Step by Step 读书笔记(四) Working with Sets (使用集合) Limiting Set and AutoExists
    SQL Server 2012 Analysis Services Tabular Model 读书笔记
    Microsoft SQL Server 2008 MDX Step by Step 学习笔记连载目录
    2011新的开始,介绍一下AgileEAS.NET平台在新的一年中的发展方向
  • 原文地址:https://www.cnblogs.com/gc2013/p/4073540.html
Copyright © 2011-2022 走看看