zoukankan      html  css  js  c++  java
  • Http 辅助类

    using System;
    using System.Drawing;
    using System.IO;
    using System.Net;
    using System.Net.Cache;
    using System.Text;
    
    namespace ePlatform.Processor
    {
        /// <summary>
        /// Http处理
        /// </summary>
        public static class Http
        {
            /// <summary>
            /// 创建访问URL的Response
            /// </summary>
            /// <param name="uri"></param>
            /// <param name="mycookies"></param>
            /// <returns></returns>
            public static HttpWebResponse GetWebResponse(string uri, ref CookieCollection mycookies)
            {
                try
                {
                    //请求
                    var req = HttpWebRequest.Create(uri) as HttpWebRequest;
                    var cookies = new CookieContainer();
    
                    req.KeepAlive = true;
                    req.AllowAutoRedirect = true;
                    req.AllowWriteStreamBuffering = true;
                    req.Credentials = CredentialCache.DefaultCredentials;
                    req.Referer = "http://www.lanxe.net/";
                    req.Timeout = 20000;
                    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)";
                    req.CookieContainer = cookies;
    
                    //加入额外的Cookie
                    if (mycookies != null)
                    {
                        foreach (Cookie item in mycookies)
                        {
                            cookies.Add(item);
                        }
                    }
    
                    //回应
                    var res = req.GetResponse() as HttpWebResponse;
                    mycookies = cookies.GetCookies(req.RequestUri);
                    res.Cookies = mycookies;
    
                    return res;
                }
                catch
                {
                    return null;
                }
            }
    
            /// <summary>
            /// 向网站Post数据
            /// </summary>
            /// <param name="uri"></param>
            /// <param name="mycookies"></param>
            /// <param name="encoding"></param>
            /// <param name="data"></param>
            /// <returns></returns>
            public static string PostData(string uri, ref CookieCollection mycookies, string encoding, string data)
            {
                var encode = getEncoding(encoding);
                var datas = encode.GetBytes(data);
                var length = datas.Length;
    
                try
                {
                    //请求
                    var req = HttpWebRequest.Create(uri) as HttpWebRequest;
                    var cookies = new CookieContainer();
                    var cache = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
    
                    req.KeepAlive = true;
                    req.AllowAutoRedirect = true;
                    req.AllowWriteStreamBuffering = true;
                    req.Credentials = CredentialCache.DefaultCredentials;
                    req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
                    req.Accept = "*/*";
                    req.Referer = "http://translate.google.com.hk/";
                    req.Timeout = 20000;
                    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)";
                    req.CachePolicy = cache;
                    req.Method = "POST";
                    req.ContentLength = length;
                    req.CookieContainer = cookies;
    
                    //加入额外的Cookie
                    if (mycookies != null)
                    {
                        foreach (Cookie item in mycookies)
                        {
                            cookies.Add(item);
                        }
                    }
    
                    //发送内容
                    var stream = req.GetRequestStream();
                    stream.Write(datas, 0, length);
                    stream.Close();
    
                    //获取返回的数据
                    var res = (HttpWebResponse)req.GetResponse();
                    mycookies = cookies.GetCookies(req.RequestUri);
                    return getHtml(res, encode);
                }
                catch
                {
                    return null;
                }
            }
    
            /// <summary>
            /// 获取网页源代码
            /// </summary>
            /// <param name="uri"></param>
            /// <param name="encodeName"></param>
            /// <param name="outCookies"></param>
            /// <returns></returns>
            public static string GetHtml(string uri, string encodeName, ref CookieCollection mycookies)
            {
                var response = GetWebResponse(uri, ref mycookies);
                if (response == null)
                {
                    return null;
                }
                try
                {
                    var encode = getEncoding(encodeName);
                    return getHtml(response, encode);
                }
                catch
                {
                    return null;
                }
            }
    
            /// <summary>
            /// 获取网页流图像
            /// </summary>
            /// <param name="uri"></param>
            /// <param name="mycookies"></param>
            /// <param name="length"></param>
            /// <returns></returns>
            public static Image GetImage(string uri, ref CookieCollection mycookies, out long length)
            {
                length = 0;
                var res = GetWebResponse(uri, ref mycookies);
                if (res == null)
                {
                    return null;
                }
                try
                {
                    length = res.ContentLength;
                    Stream stream = res.GetResponseStream();
                    return Image.FromStream(stream, true);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            /// <summary>
            /// 根据名称获取网页编码格式
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            static Encoding getEncoding(string name)
            {
                if (string.IsNullOrEmpty(name))
                {
                    return Encoding.UTF8;
                }
                else if (name.ToLower() == "default")
                {
                    return Encoding.Default;
                }
                else
                {
                    return Encoding.GetEncoding(name);
                }
            }
    
            /// <summary>
            /// 从Response中获取HTML内容
            /// </summary>
            /// <param name="res"></param>
            /// <param name="encode"></param>
            /// <returns></returns>
            static string getHtml(HttpWebResponse res, Encoding encode)
            {
                var outs = new StringBuilder();
                var stream = res.GetResponseStream();
                var reader = new StreamReader(stream, encode);
    
                // 每次读取1024
                var buffer = new char[1024];
                var count = reader.Read(buffer, 0, 1024);
                while (count > 0)
                {
                    outs.Append(new String(buffer, 0, count));
                    count = reader.Read(buffer, 0, 1024);
                }
    
                // 读取完毕
                reader.Close();
                stream.Close();
    
                return outs.ToString();
            }
        }
    }
    

      

    将不朽的青春献给伟大的编程事业,世界将因我们而改变!
  • 相关阅读:
    Java方向如何准备技术面试答案(汇总版)
    HTTP与HTTPS的区别
    MyBatisPlus环境下使用MyBatis的配置类
    idea 插件的使用 进阶篇(个人收集使用中的)
    Leveldb实现原理
    浅析 Bigtable 和 LevelDB 的实现
    IKAnalyzer进行中文分词和去停用词
    Elasticsearch之中文分词器插件es-ik的自定义词库
    使用Java High Level REST Client操作elasticsearch
    任正非:坚持逐渐辞退低绩效员工
  • 原文地址:https://www.cnblogs.com/luoyefeiwu/p/4054197.html
Copyright © 2011-2022 走看看