Loading

记录Post Form Data

if (string.IsNullOrEmpty(ConfigMgr.WxPlatformToKen))
            {
                string result = string.Empty;
                CommonConfigWxPlatformElement wxPlatformConfig = CommonConfigManager.Instance.Root.WxPlatform;

                if (!string.IsNullOrEmpty(wxPlatformConfig.BaseUrl) && wxPlatformConfig.BaseUrl.StartsWith("https",StringComparison.OrdinalIgnoreCase))
                {
                    System.Console.WriteLine("https connections.....");
                    ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
                    // 这里设置了协议类型。
                    //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;// (SecurityProtocolType)3072;// SecurityProtocolType.Tls1.2; 
                    ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072; //(SecurityProtocolType)768 | (SecurityProtocolType)3072

                    ServicePointManager.CheckCertificateRevocationList = true;
                    ServicePointManager.DefaultConnectionLimit = 100;
                    ServicePointManager.Expect100Continue = false;
                }

                Uri urlUri = new Uri(wxPlatformConfig.BaseUrl + wxPlatformConfig.TokenPath);

                NameValueCollection nvc = new NameValueCollection();
                nvc.Add("grant_type", "password");
                nvc.Add("username", wxPlatformConfig.TokenUser);
                nvc.Add("password", wxPlatformConfig.TokenPwd);

                string boundary = CreateFormDataBoundary();                                       // 边界符
                byte[] beginBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");     // 边界符开始。【☆】右侧必须要有 \r\n 。
                byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n"); // 边界符结束。【☆】两侧必须要有 --\r\n 。
                byte[] newLineBytes = Encoding.UTF8.GetBytes("\r\n"); //换一行


                HttpWebRequest httpWebRequest = null;
                try
                {
                    httpWebRequest = WebRequest.Create(urlUri) as HttpWebRequest; // 创建请求
                    httpWebRequest.Headers.Add("Authorization", wxPlatformConfig.TokenSalt);
                    httpWebRequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
                    httpWebRequest.Method = WebRequestMethods.Http.Post;
                    httpWebRequest.KeepAlive = true;
                    httpWebRequest.Timeout = -1;
                    httpWebRequest.ServicePoint.Expect100Continue = false;
                    httpWebRequest.Proxy = null;

                    string formDataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n" + "{1}\r\n";
                    MemoryStream memoryStream = new MemoryStream();
                    foreach (string key in nvc.Keys)
                    {
                        string formItem = string.Format(formDataTemplate, key, nvc[key]);
                        byte[] formItemBytes = Encoding.UTF8.GetBytes(formItem);

                        memoryStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length); // 1.1 写入FormData项的开始边界符
                        memoryStream.Write(formItemBytes, 0, formItemBytes.Length);           // 1.2 将键值对写入FormData项中
                    }

                    memoryStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);             // 2.4 写入FormData的结束边界符

                    httpWebRequest.ContentLength = memoryStream.Length;

                    Stream requestStream = httpWebRequest.GetRequestStream();

                    memoryStream.Position = 0;
                    byte[] tempBuffer = new byte[memoryStream.Length];
                    memoryStream.Read(tempBuffer, 0, tempBuffer.Length);
                    memoryStream.Close();

                    requestStream.Write(tempBuffer, 0, tempBuffer.Length);        // 将内存流中的字节写入 httpWebRequest 的请求流中
                    requestStream.Close();

                    HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; // 获取响应
                    if (httpWebResponse != null)
                    {
                        //GetHeaders(ref httpResult, httpWebResponse);

                        Stream stream2 = httpWebResponse.GetResponseStream();
                        StreamReader reader2 = new StreamReader(stream2);
                        result = reader2.ReadToEnd();
                        httpWebResponse.Close();

                        var obj = Common.JsonToObject(result);
                        if (obj != null && obj.access_token != null)
                        {
                            ConfigMgr.WxPlatformToKen = obj.access_token.ToString();
                        }
                    }
                }
                catch (Exception ex)
                {
                    HHTech.Log.Error("GetTonken Error", ex);
                }

 

posted @ 2021-01-21 20:09  jevan  阅读(124)  评论(0编辑  收藏  举报