现在的位置: 首页 > 综合 > 正文

常用的Http工具函数集合

2017年11月07日 ⁄ 综合 ⁄ 共 3286字 ⁄ 字号 评论关闭
    /// <summary>
    /// 常用的Http工具函数集合
    /// </summary>
    class HtmlTool
    {
        /// <summary>
        /// 模拟POST访问
        /// </summary>
        /// <param name="postUrl">模拟POST的URL</param>
        /// <param name="postDataStr">需要POST的数据</param>
        /// <returns>模拟访问的网页源代码</returns>
        public static string sendPost(string postUrl, string postDataStr)
        {
            string retString = "";
            if (Global.noException)
            {
                //用来存放cookie
                CookieContainer cookie = null;
                HttpWebRequest request = null;
                Stream myRequestStream = null;
                StreamWriter myStreamWriter = null;
                HttpWebResponse response = null;
                Stream myResponseStream = null;
                StreamReader myStreamReader = null;
                try
                {
                    cookie = new CookieContainer();

                    //发送一个POST请求
                    request = (HttpWebRequest)WebRequest.Create(postUrl);
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
                    request.CookieContainer = cookie;
                    myRequestStream = request.GetRequestStream();
                    myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
                    myStreamWriter.Write(postDataStr);

                    //获取返回的内容
                    response = (HttpWebResponse)request.GetResponse();
                    response.Cookies = cookie.GetCookies(response.ResponseUri);
                    myResponseStream = response.GetResponseStream();
                    myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                    retString = myStreamReader.ReadToEnd();
                }
                catch (Exception ex)
                {
                    Global.noException = false;
                    Console.Write("发送POST失败!\n报错:" + ex.Message);
                }
                finally {
                    if (myStreamWriter != null)
                    {
                        myStreamWriter.Close();
                    }
                    if (myStreamReader != null)
                    {
                        myStreamReader.Close();
                    }
                    if (myResponseStream != null)
                    {
                        myResponseStream.Close();
                    }
                    if (response != null)
                    {
                        response.Close();
                    }
}
            }
            return retString;
        }

        /// <summary>
        /// 模拟GET访问
        /// </summary>
        /// <param name="getUrl">模拟GET的URL</param>
        /// <returns>模拟访问的网页源代码</returns>
        public static string SendGet(string getUrl)
        {
            string retString = "";
            if (Global.noException)
            {
                HttpWebRequest request = null;
                HttpWebResponse response = null;
                Stream myResponseStream = null;
                StreamReader myStreamReader = null;
                try
                {
                    request = (HttpWebRequest)WebRequest.Create(getUrl);
                    request.Method = "GET";
                    request.ContentType = "text/html;charset=UTF-8";
                    response = (HttpWebResponse)request.GetResponse();
                    myResponseStream = response.GetResponseStream();
                    myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                    retString = myStreamReader.ReadToEnd();
                }
                catch (Exception ex)
                {
                    Global.noException = false;
                    Console.Write("发送GET失败!\n报错:" + ex.Message);
                }
                finally {
                    if (myStreamReader != null)
                    {
                        myStreamReader.Close();
                    }
                    if (myResponseStream != null)
                    {
                        myResponseStream.Close();
                    }
                    if (response != null)
                    {
                        response.Close();
                    }
                }
            }
            return retString;
        }


        /// <summary>
        /// 获取某个URL的重定向地址
        /// </summary>
        /// <param name="getUrl">原始的地址</param>
        /// <returns>重定向之后的地址</returns>
        public static string GetRedirection(string getUrl)
        {
            if (Global.noException)
            {
                HttpWebRequest request = null;
                HttpWebResponse response = null;
                try
                {
                    request = (HttpWebRequest)WebRequest.Create(getUrl);
                    request.AllowAutoRedirect = false;
                    request.Method = "GET";
                    request.ContentType = "text/html;charset=UTF-8";
                    response = (HttpWebResponse)request.GetResponse();
                    if (response.Headers.Get("Location") == null)
                        return "";
                    return response.Headers.Get("Location");
                }
                catch (Exception ex)
                {
                    Global.noException = false;
                    Console.Write("获取重定向失败!报错:\n" + ex.Message);
                }
                finally {
                    if (response != null)
                    {
                        response.Close();
                    }
                }
            }
            return "";
        }

        /*
         * 在post的时候有时也用的到cookie
         * 所以在外部一个cookie属性随时保存 
         * CookieContainer cookie = new CookieContainer();
         * 注意:有时候请求会重定向,但我们就需要从重定向url获取东西,可以用:
         * request.AllowAutoRedirect = false;
         * 设置重定向禁用,你就可以从headers的Location属性中获取重定向地址
         */

    }

抱歉!评论已关闭.