/// <summary> /// 设置Post数据 /// </summary> /// <param name="param"></param> private void SetPostData(HttpRequestParam param) { //验证在得到结果时是否有传入数据 if (request.Method.Trim().ToLower().Contains("post")) { //写入Byte类型 if (param.PostDataType == PostDataType.Byte) { //验证在得到结果时是否有传入数据 if (param.PostDataByte != null && param.PostDataByte.Length > 0) { request.ContentLength = param.PostDataByte.Length; request.GetRequestStream().Write(param.PostDataByte, 0, param.PostDataByte.Length); } }//写入文件 else if (param.PostDataType == PostDataType.FilePath) { StreamReader r = new StreamReader(param.PostDate, encoding); byte[] buffer = Encoding.Default.GetBytes(r.ReadToEnd()); r.Close(); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); } else { //验证在得到结果时是否有传入数据 if (!string.IsNullOrEmpty(param.PostDate)) { byte[] buffer = Encoding.Default.GetBytes(param.PostDate); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); } } } }
/// <summary> /// 设置准备参数 /// </summary> /// <param name="param"></param> private void SetRequestParam(HttpRequestParam param) { //设置证书 SetCer(param.CerPath, param.Url); //设置代理 SetProxy(param.ProxyUserName, param.ProxyPwd, param.ProxyIp); //提交方式 (Post,Get等) request.Method = param.Method; //请求超时 request.Timeout = param.Timeout; //读写超时 request.ReadWriteTimeout = param.ReadWriteTimeout; request.Accept = param.Accept; request.ContentType = param.ContentType; request.UserAgent = param.UserAgent; //编码 SetEncoding(param.Encoding); //设置cookie SetCookie(param.Cookie, param.Cookiecollection); //来源地址 request.Referer = param.Referer; //是否执行跳转功能 request.AllowAutoRedirect = param.AllowAutoRedirect; //设置Post数据 SetPostData(param); //最大连接数 if (param.ConnectionLimit > 0) { request.ServicePoint.ConnectionLimit = param.ConnectionLimit; } }
/// <summary> /// 根据相传入的数据,得到相应页面数据 /// </summary> /// <param name="strPostdata">传入的数据Post方式,get方式传NUll或者空字符串都可以</param> /// <returns>string类型的响应数据</returns> private HttpResultParam GetHttpRequestData(HttpRequestParam objhttpitem) { //返回参数 HttpResultParam result = new HttpResultParam(); try { #region 得到请求的response using (response = (HttpWebResponse)request.GetResponse()) { result.Header = response.Headers; if (response.Cookies != null) { result.CookieCollection = response.Cookies; } if (response.Headers["set-cookie"] != null) { result.Cookie = response.Headers["set-cookie"]; } MemoryStream _stream = new MemoryStream(); //GZIIP处理 if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase)) { //开始读取流并设置编码方式 //new GZipStream(response.GetResponseStream(), CompressionMode.Decompress).CopyTo(_stream, 10240); //.net4.0以下写法 _stream = GetMemoryStream(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress)); } else { //开始读取流并设置编码方式 //response.GetResponseStream().CopyTo(_stream, 10240); //.net4.0以下写法 _stream = GetMemoryStream(response.GetResponseStream()); } //获取Byte byte[] RawResponse = _stream.ToArray(); //是否返回Byte类型数据 if (objhttpitem.ResultType == ResultType.Byte) { result.ResultByte = RawResponse; } //从这里开始我们要无视编码了 if (encoding == null) { string temp = Encoding.Default.GetString(RawResponse, 0, RawResponse.Length); //<meta(.*?)charset([\s]?)=[^>](.*?)> Match meta = Regex.Match(temp, "<meta([^<]*)charset=([^<]*)[\"']", RegexOptions.IgnoreCase | RegexOptions.Multiline); string charter = (meta.Groups.Count > 2) ? meta.Groups[2].Value : string.Empty; charter = charter.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(";", string.Empty); if (charter.Length > 0) { charter = charter.ToLower().Replace("iso-8859-1", "gbk"); encoding = Encoding.GetEncoding(charter); } else { if (response.CharacterSet.ToLower().Trim() == "iso-8859-1") { encoding = Encoding.GetEncoding("gbk"); } else { if (string.IsNullOrEmpty(response.CharacterSet.Trim())) { encoding = Encoding.UTF8; } else { encoding = Encoding.GetEncoding(response.CharacterSet); } } } } //得到返回的HTML result.ResultHtml = encoding.GetString(RawResponse); //最后释放流 _stream.Close(); } #endregion } catch (WebException ex) { //这里是在发生异常时返回的错误信息 result.ResultHtml = "String Error"; response = (HttpWebResponse)ex.Response; } if (objhttpitem.IsToLower) { result.ResultHtml = result.ResultHtml.ToLower(); } return(result); }
/// <summary> /// 多条件设定,获取数据 /// </summary> /// <param name="param"></param> /// <returns></returns> public HttpResultParam GetHttpHtml(HttpRequestParam param) { //准备参数 SetRequestParam(param); return(GetHttpRequestData(param)); }