public static string HttpPostFormMsg(string url, FormData form, int timeout = 10000) { int bufferSize = 1024; HTTPPackage package = new HTTPPackage(bufferSize); string content = ""; NetModel.NetMgr.Http.HttpHelper.HttpPostData( url, timeout, form, null, null, (tmpData, count) => { if (count.Equals(0)) { byte[] str = package.GetData(); package.Clear(); package = null; content = Encoding.UTF8.GetString(str); } else if (count.Equals(-1)) { throw new NullReferenceException(Encoding.UTF8.GetString(tmpData)); } else { package.AddBuffer(tmpData, count); } }, err => { throw new NullReferenceException(string.Format("地址:{0}的网络访问出错=====>>{1}", url, err)); }); return(content); }
/// <summary> /// 表单提交 /// </summary> /// <param name="url"></param> /// <param name="timeOut"></param> /// <param name="form">表单文件</param> /// <returns></returns> public static void HttpPostData(string url, int timeOut, FormData form, //IDictionary<HttpRequestHeader, string> header, IDictionary <string, string> headerCustom, CookieCollection cookies, Action <byte[], int> callBack, Action <string> errorHandler ) { HttpWebRequest request; if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { //对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true) ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version11; //http版本,默认是1.1,这里设置为1.0 } else { request = WebRequest.Create(url) as HttpWebRequest; } SetDefaultUserAgent(request.Headers); request.Timeout = timeOut; request.Method = "POST"; if (headerCustom != null) { foreach (var pair in headerCustom) { switch (pair.Key) { case "Accept": case "Connection": case "Content-Type": case "Expect": SetHeaderValue(request.Headers, pair.Key, pair.Value); break; case "Content-Length": //request.ContentLength = long.Parse(tmpHeader[i]); //tmpHeader.Remove("Content-Length"); SetHeaderValue(request.Headers, pair.Key, pair.Value); break; case "Date": //request.Date = System.DateTime.Parse(tmpHeader[i]); //tmpHeader.Remove("Date"); SetHeaderValue(request.Headers, pair.Key, pair.Value); break; case "Host": request.Proxy = new WebProxy(pair.Value, false); break; case "If-Modified-Since": //request.IfModifiedSince = System.DateTime.Parse(tmpHeader[i]); //tmpHeader.Remove("If-Modified-Since"); SetHeaderValue(request.Headers, pair.Key, pair.Value); break; case "Range": //string[] rangeArr = tmpHeader[i].Split('_'); //request.AddRange(int.Parse(rangeArr[0]), int.Parse(rangeArr[1])); //tmpHeader.Remove("Range"); SetHeaderValue(request.Headers, pair.Key, pair.Value); break; case "Referer": //request.Referer = tmpHeader[i]; //tmpHeader.Remove("Referer"); SetHeaderValue(request.Headers, pair.Key, pair.Value); break; case "Transfer-Encoding": //request.TransferEncoding = tmpHeader[i]; //tmpHeader.Remove("Transfer-Encoding"); SetHeaderValue(request.Headers, pair.Key, pair.Value); break; case "User-Agent": //request.UserAgent = tmpHeader[i]; //tmpHeader.Remove("User-Agent"); SetHeaderValue(request.Headers, pair.Key, pair.Value); break; default: request.Headers.Add(pair.Key, pair.Value); break; } } } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } string boundary = "-----------" + DateTime.Now.Ticks.ToString("x"); request.ContentType = "multipart/form-data; boundary=" + boundary; MemoryStream stream = new MemoryStream(); form.GetWordsFromData(stream, boundary); request.ContentLength = stream.Length; using (Stream streamRequest = request.GetRequestStream()) { stream.Seek(0, SeekOrigin.Begin); byte[] data = new byte[stream.Length]; int count = stream.Read(data, 0, data.Length); streamRequest.Write(data, 0, count); } HttpWebResponse reponse = null; try { reponse = request.GetResponse() as HttpWebResponse; } catch (System.Net.ProtocolViolationException e) { errorHandler(e.ToString()); } catch (System.Net.WebException e) { errorHandler(e.ToString()); } catch (System.InvalidOperationException e) { errorHandler(e.ToString()); } catch (System.NotSupportedException e) { errorHandler(e.ToString()); } catch (System.Exception e) { errorHandler(e.ToString()); } SetCallBackMessage(reponse, callBack); //callBack(readStream.ReadToEnd()); if (reponse != null) { reponse.Close(); } }