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();
            }
        }
    }
    

      

    将不朽的青春献给伟大的编程事业,世界将因我们而改变!
  • 相关阅读:
    混合现实开发教程unity2017
    Intro to Airplane Physics in Unity 3D – 2017 and 2018
    Unity Awards 2018最佳资源
    ambiguous
    Unity2018.3全新Prefab预制件系统深入介绍视频教程+PPT+Demo源码
    Android Studio 集成开发工具教学视频 + 项目实战安卓多SDK接入与集成
    Unity下一轮最大的变革-Entity Component System & C# Jobs System
    使用unity开发游戏时如觉得游戏声音太吵,点Mute Audio
    SQL Delta实用案例介绍
    经典批处理实现自动关机(BAT)
  • 原文地址:https://www.cnblogs.com/luoyefeiwu/p/4054197.html
Copyright © 2011-2022 走看看