• http链接中请求进行编码,Http请求api


    1 如果参数中含有特殊字符&,则强制URL编码<br>
    2 
    3  http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值,
    在计算机中使用用ASCII码表示
    4 5 如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。 6 比如说“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样“name1=va&lu=e1”。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了歧义。 7 8 URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。
    第一种方法
    第一步:获取在Web.config中配置要请求的地址
    string url = System.Web.Configuration.WebConfigurationManager.AppSettings["url"];
    第二步:把字符串编码(编码详解)
    string allStr = System.Web.HttpUtility.UrlEncode(str, System.Text.Encoding.UTF8) ;
    第三步:把参数转成byte 
     byte[] bufferB = Encoding.UTF8.GetBytes(allStr);
    第四步:构建HttpWebRequest,并发送
    System.Net.ServicePointManager.DefaultConnectionLimit = 200;
    HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
    WebReq.Method = "POST";
    WebReq.ContentType = "application/x-www-form-urlencoded";
    WebReq.ContentLength = allStr.Length;
    Stream PostData = WebReq.GetRequestStream();
    PostData.Write(bufferB, 0, bufferB.Length);
    PostData.Close();
    第五步:接收返回结果(解析返回的JSON)
    HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
    StreamReader sr = new StreamReader(WebResp.GetResponseStream(), System.Text.Encoding.UTF8);
    string backstr = sr.ReadToEnd();
    backstr = HttpUtility.UrlDecode(backstr);
    Console.WriteLine(WebResp.StatusCode);
    Console.WriteLine(WebResp.Server);
    Stream Answer = WebResp.GetResponseStream();
    StreamReader _Answer = new StreamReader(Answer);
    Console.WriteLine(_Answer.ReadToEnd());
    --------------------- 
    作者:容妞 
    来源:CSDN 
    原文:https://blog.csdn.net/lijingrong_ljr/article/details/53214729 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    string url = "http://16.8.3.91:8089/api/query/Bicycle?deviceno=1&operator=2&sign=9fe789d7a5629a59ed56d7a256dc5a1a&cardno=0310";//http需要传递的参数与地址
                WebRequest wRequest = WebRequest.Create(url);
                wRequest.Method = "GET";
                wRequest.ContentType = "text/html;charset=UTF-8";
                WebResponse wResponse = wRequest.GetResponse();
                Stream stream = wResponse.GetResponseStream();
                StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
                string str = reader.ReadToEnd();   //url返回的值
    --------------------- 
    作者:叫我梧桐树 
    来源:CSDN 
    原文:https://blog.csdn.net/u012732371/article/details/58587092 
    版权声明:本文为博主原创文章,转载请附上博文链接!
                            M1001 m1001 = new M1001()
                            {
                                Head = baseHead,
                                Body = body
                            };                       
                          
                            string serviceUrl = "https://jq.asus.com.cn/omsec/v1.0/ECOrder/PutOrder?appid=t0a2YlbyD5JL&token=LLfDDlwHuifVnP2BNngCdebuj4DtYXtAD6QAKEHaA4cDMUniKkKnNJwnuQlL";                        
                            Encoding encoding = Encoding.UTF8;
                            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
                            request.Method = "POST";
                            request.Accept = "text/html, application/xhtml+xml, */*";
                            request.ContentType = "application/json";
                            byte[] buffer = encoding.GetBytes(JsonConvert.SerializeObject(m1001));
                            request.ContentLength = buffer.Length;
                            request.GetRequestStream().Write(buffer, 0, buffer.Length);
                            HttpWebResponse res = (HttpWebResponse)request.GetResponse();
                            using (StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8))
                            {
                                string Result = reader.ReadToEnd();
                            }

     异步async

                            string json = JsonConvert.SerializeObject(m1001);
                            string appid = System.Configuration.ConfigurationManager.AppSettings["appid"];
                            string token = System.Configuration.ConfigurationManager.AppSettings["token"];
                            string serviceUrl = "https://xxxxxx?appid=" + appid + "&token=" + token + "";
    
                            HttpContent JSONContents = new StringContent(JsonConvert.SerializeObject(m1001), Encoding.UTF8, "application/json");
    
                            HttpClient _httpClient = new HttpClient();
                            var Msg = await _httpClient.PostAsync(serviceUrl, JSONContents);
                            if (Msg.IsSuccessStatusCode)
                            {
                                string Ret = "";
                                var s = Msg.Content.ReadAsStringAsync();
                                JObject objs = JObject.Parse(s.Result);
                                Root baseroot = JsonConvert.DeserializeObject<Root>(s.Result);
                                if (string.IsNullOrEmpty(baseroot.head.errorCode))
                                {//写入成功
                                    Ret = baseroot.body.CreateDateTime.ToString();
                                }
                                else
                                {//写入失败
                                    Ret = baseroot.head.transMessage.ToString();//发邮件还是怎么的
                                }
                            }
     
    // 使用C# 5.0中提供的async 和await关键字来定义异步方法
            // 从代码中可以看出C#5.0 中定义异步方法就像定义同步方法一样简单。
            // 使用async 和await定义异步方法不会创建新线程,
            // 它运行在现有线程上执行多个任务.
            // 此时不知道大家有没有一个疑问的?在现有线程上(即UI线程上)运行一个耗时的操作时,
            // 为什么不会堵塞UI线程的呢?
            // 这个问题的答案就是 当编译器看到await关键字时,线程会
            private async Task<long> AccessWebAsync()
            {
                MemoryStream content = new MemoryStream();
    
                // 对MSDN发起一个Web请求
                HttpWebRequest webRequest = WebRequest.Create("http://msdn.microsoft.com/zh-cn/") as HttpWebRequest;
                if (webRequest != null)
                {
                    // 返回回复结果
                    using (WebResponse response = await webRequest.GetResponseAsync())
                    {
                        using (Stream responseStream = response.GetResponseStream())
                        {
                            await responseStream.CopyToAsync(content);
                        }
                    }
                }
    
                txbAsynMethodID.Text = Thread.CurrentThread.ManagedThreadId.ToString() ;
                return content.Length;
            }
                            string CustomerPO = j["Success"]["items"]["item"][i]["out_tid"].ToString();
                            string storage_name = com.Switch_ShipTo(j["Success"]["items"]["item"][i]["storage_id"].ToString());//   要做个仓库编码匹配仓库名称的设置             
                            string tid_item = j["Success"]["items"]["item"][i]["tid_item"].ToString();//明细
                            string pro_totalfee = j["Success"]["items"]["item"][i]["pro_totalfee"].ToString();//产品总金额
    
                            JArray jArray = JArray.Parse(tid_item);
                            JArray arr = new JArray();
                            for (int q = 0; q < jArray.Count; q++)
                            {
                                JObject obj = new JObject();
                                JObject jdata = (JObject)jArray[q];
                                obj["linenum"] = jdata["pro_detail_code"];
                                obj["sku"] = jdata["product_no"].ToString();//
                                obj["originalsku"] = jdata["product_no"].ToString();//先在ebd里查询不到
                                obj["qty"] = jdata["pro_num"].ToString(); //edbProductGet(jdata["product_no"].ToString());
                                obj["inventoryname"] = com.Switch_ShipTo(jdata["storage_id"].ToString());                                                                                                     
                                obj["price"] = com.Change(Convert.ToDouble(pro_totalfee) / jArray.Count, 2);
                                arr.Add(obj);
                            }
    
                            var data = new JObject
                                    {
                                        {"Head",new JObject
                                            {
                                                {"TransCode","X1002" },
                                                {"TransId",com.GenerateTransId(18)}
                                            }
                                        },
                                        { "Body", new JObject
                                            {
                                                {"orderno", orderno },
                                                {"CustomerPO", CustomerPO},
                                                {"ordertypecode", "Direct" },
                                                {"billto",  _Setting.Value.JD_billto.ToString() },//账款店铺是不是要写为定值
                                                {"shipto", storage_name},//还有就是shipto,目前是8个仓,但是从e店宝获取的只是storage_id,是要把对应的仓库名称写在配置里,还是只传id值
                                                {"workid", _Setting.Value.JD_workid.ToString()}, //workid                                  
                                                {"detail", arr }
                                            }
                                        }
                                     };
    
                            string appid = _Setting.Value.Gettoken_appid;//这个是要替换成正式的appid(有了)    
                            var httpClient = new HttpClient();
                            string serviceUrl = "https://xxxcn:9007/api/v1.0/Order/PutStandard?appid=" + appid + "&token=" + com.GetNewToken() + "";//这个是写入京东的url
                            HttpContent JSONContents = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
    
                            var message = await httpClient.PostAsync(serviceUrl, JSONContents);
                            if (message.IsSuccessStatusCode)
                            {
                                string rr = await message.Content.ReadAsStringAsync();
                                JObject objs = JObject.Parse(rr);
                                string errorCode = objs["head"]["errorCode"].ToString();
                                if (string.IsNullOrEmpty(errorCode))
                                {//写入成功                           
                                }
                                else
                                {//写入失败
                                    com.JD_Error("订单:" + orderno + ",写入StageHead表失败:" + objs["head"]["transMessage"].ToString());
                                }
                            }
    
                            //using (var resss = await httpClient.PostAsync(serviceUrl, JSONContents))
                            //{
                            //    if (resss.IsSuccessStatusCode)
                            //    {
                            //        string ser = $"{resss.Content.ReadAsStringAsync().Result}";
                            //        JObject objs = JObject.Parse(ser);
                            //        string errorCode = objs["head"]["errorCode"].ToString();
                            //        if (string.IsNullOrEmpty(errorCode))
                            //        {//写入成功                           
                            //        }
                            //        else
                            //        {//写入失败
                            //            com.JD_Error("订单:" + orderno + ",写入StageHead表失败:" + objs["head"]["transMessage"].ToString());
                            //        }
    
                            //    }
                            //}
    

      

     1                          //string appid = _Setting.Value.Gettoken_appid;//这个是要替换成正式的appid(有了)                       
     2                         //string serviceUrl = "https://xxxx.com.cn:9007/api/v1.0/Order/PutStandard?appid=" + appid + "&token=" + com.GetNewToken() + "";// 3                         //Encoding encoding = Encoding.UTF8;
     4                         //HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
     5                         //request.Method = "POST";
     6                         //request.Accept = "text/html, application/xhtml+xml, */*";
     7                         //request.ContentType = "application/json";
     8                         //byte[] buffer = encoding.GetBytes(JsonConvert.SerializeObject(data));
     9                         //request.ContentLength = buffer.Length;
    10                         //request.GetRequestStream().Write(buffer, 0, buffer.Length);
    11                         //HttpWebResponse res = (HttpWebResponse)request.GetResponse();
    12                         //using (StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8))
    13                         //{
    14                         //    string Result = reader.ReadToEnd();
    15                         //    JObject objs = JObject.Parse(Result);
    16                         //    string errorCode = objs["head"]["errorCode"].ToString();
    17                         //    if (string.IsNullOrEmpty(errorCode))
    18                         //    {//写入成功                           
    19                         //    }
    20                         //    else
    21                         //    {//写入失败
    22                         //        com.JD_Error("订单:" + orderno + ",写入StageHead表失败:" + objs["head"]["transMessage"].ToString());
    23                         //    }
    24                         //}

     Header中加参数

     public static async Task<string> ValidateToken(string URL, string HeadersPara)
            {
                try
                {
                    HttpClient httpClient = new HttpClient();
                    httpClient.DefaultRequestHeaders.Add("Authorization", HeadersPara);
                    var token=  await  httpClient.PostAsync(URL, null);//body中没有传值,用null替代
                    if (token.IsSuccessStatusCode)
                    {
                        var s = token.Content.ReadAsStringAsync();
                        var j = JObject.Parse(s.Result);
                        var rettoken = j["DATA"]["TOKEN"].ToString();
                        return rettoken;
                    }
                    else
                    {
                        throw new Exception("StatusCode:" + token.StatusCode.ToString());
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            }

     

  • 相关阅读:
    vagrant 修改配置生效
    Linux下如何获取CPU内存等硬件信息
    linux命令系列 sudo apt-get update和upgrade的区别
    docker-compose up 启动容器服务超时错误:ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information
    ERROR: manifest for hyperledger/fabric-orderer:latest not found
    fabric2.0开发 部署fabric环境和fabric-samples的启动(2)
    开源架构Fabric、FISCO BCOS(以下简称“BCOS”)、CITA 技术对比
    Centos 7 安装配置 Mariadb 数据库
    liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib64/librpmio.so.3)
    ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/11022959.html
Copyright © 2020-2023  润新知