public class RequestWeb
    {
        private readonly static int TIMEOUT = 15000;
        private CookieContainer _cookieCon = new CookieContainer();
        private CredentialCache _credentials;

        /// <summary>
        /// 通过url请求数据
        /// </summary>
        /// <param name="url">被请求页面的url</param>
        /// <param name="proxyServer">代理服务器</param>
        /// <returns>返回页面内容</returns>
        public string GetPageContent(string url, string proxyServer)
        {
            StringBuilder ret = new StringBuilder("");
            HttpWebResponse rsp = null;

            try
            {
                Uri uri = new Uri(url);
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
                if (!string.IsNullOrEmpty(proxyServer))
                {
                    req.Proxy = new WebProxy(proxyServer);
                }
                req.CookieContainer = this._cookieCon;
                req.Headers.Add("Accept-Language: zh-cn");
                req.AllowAutoRedirect = true;
                req.Timeout = TIMEOUT;

                if (this._credentials != null)
                {
                    req.PreAuthenticate = true;
                    req.Credentials = this._credentials;
                }
                rsp = (HttpWebResponse)req.GetResponse();

                Stream rspStream = rsp.GetResponseStream();
                StreamReader sr = new StreamReader(rspStream, System.Text.Encoding.Default);

                //获取数据
                Char[] read = new Char[256];
                int count = sr.Read(read, 0, 256);
                while (count > 0)
                {
                    ret.Append(read, 0, count);
                    count = sr.Read(read, 0, 256);
                }
            }
            catch (Exception e)
            {
                ret.Append(e.Message);
            }
            finally
            {
                if (rsp != null)
                {
                    rsp.Close();
                }
            }
            return ret.ToString();
        }


        /// <summary>
        /// 通过url请求数据(Post方法)
        /// </summary>
        /// <param name="url">被请求页面的url</param>
        /// <param name="param">POST的内容</param>
        /// <param name="proxyServer">代理</param>
        /// <returns>返回页面内容</returns>
        public string GetPageContent(string url, string param, string proxyServer)
        {
            StringBuilder ret = new StringBuilder("");
            HttpWebResponse rsp = null;

            try
            {
                Uri uri = new Uri(url);
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
                if (!string.IsNullOrEmpty(proxyServer))
                {
                    req.Proxy = new WebProxy(proxyServer);
                }
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.Headers.Add("Accept-Language: zh-cn");
                req.CookieContainer = _cookieCon;
                req.Timeout = TIMEOUT;
                req.AllowAutoRedirect = true;
                if (_credentials != null)
                {
                    req.PreAuthenticate = true;
                    req.Credentials = _credentials;
                }

                //传入POST参数的分析
                if (param != null)
                {
                    string temp = EncodeParams(param, System.Text.Encoding.Default);
                    byte[] bytes = Encoding.UTF8.GetBytes(temp);
                    req.ContentLength = bytes.Length;
                    Stream rspStream = req.GetRequestStream();
                    rspStream.Write(bytes, 0, bytes.Length);
                    rspStream.Close();
                }
                else
                {
                    req.ContentLength = 0;
                }

                //取得请求后返回的的数据
                rsp = (HttpWebResponse)(req.GetResponse());
                Stream ReceiveStream = rsp.GetResponseStream();
                StreamReader sr = new StreamReader(ReceiveStream, System.Text.Encoding.Default);

                Char[] read = new Char[256];
                int count = sr.Read(read, 0, 256);
                while (count > 0)
                {
                    ret.Append(read, 0, count);
                    count = sr.Read(read, 0, 256);
                }
            }
            //catch (Exception e)
            //{
            //    string err = e.ToString();
            //}
            finally
            {
                if (rsp != null)
                {
                    rsp.Close();
                }
            }
            return ret.ToString();
        }

        /// <summary>
        /// 通过传入的url请求文件数据
        /// </summary>
        /// <param name="url">图片的URL</param>
        /// <param name="ProxyServer">代理服务器</param>
        /// <returns>图片内容</returns>
        public byte[] GetFile(string url, string proxyServer)
        {
            WebResponse rsp = null;
            byte[] retBytes = null;

            try
            {
                Uri uri = new Uri(url);
                WebRequest req = WebRequest.Create(uri);

                rsp = req.GetResponse();
                Stream stream = rsp.GetResponseStream();

                if (!string.IsNullOrEmpty(proxyServer))
                {
                    req.Proxy = new WebProxy(proxyServer);
                }

                using (MemoryStream ms = new MemoryStream())
                {
                    int b;
                    while ((b = stream.ReadByte()) != -1)
                    {
                        ms.WriteByte((byte)b);
                    }
                    retBytes = ms.ToArray();
                }
            }
            catch (Exception ex)
            {
                retBytes = null;
            }
            finally
            {
                if (rsp != null)
                {
                    rsp.Close();
                }
            }
            return retBytes;
        }

        private string EncodeParams(string param, Encoding enc)
        {
            StringBuilder ret = new StringBuilder();
            char[] reserved = { '?', '=', '&', '%', '+' };

            if (param != null)
            {
                int i = 0, j;
                while (i < param.Length)
                {
                    j = param.IndexOfAny(reserved, i);
                    if (j == -1)
                    {
                        ret.Append(HttpUtility.UrlEncode(param.Substring(i, param.Length - i), enc));
                        break;
                    }
                    ret.Append(HttpUtility.UrlEncode(param.Substring(i, j - i), enc));
                    ret.Append(param.Substring(j, 1));
                    i = j + 1;
                }
            }
            return ret.ToString();
        }
    }
}


相关文章:

  • 2021-09-24
  • 2021-09-20
  • 2022-12-23
  • 2021-08-04
  • 2021-09-09
  • 2021-08-01
  • 2022-02-07
  • 2022-02-09
猜你喜欢
  • 2021-11-01
  • 2021-08-08
  • 2021-11-01
  • 2021-06-26
相关资源
相似解决方案