Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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();
            }
        }