http链接中请求进行编码,Http请求
如果参数中含有特殊字符&,则强制URL编码<br> http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1=value1&name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出每一个参数,然后再用“=”来分割出参数值,
在计算机中使用用ASCII码表示 如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。
比如说“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样“name1=va&lu=e1”。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了歧义。 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 = ;
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, , 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());
// } // }
//}
//string appid = _Setting.Value.Gettoken_appid;//这个是要替换成正式的appid(有了)
//string serviceUrl = "https://xxxx.com.cn:9007/api/v1.0/Order/PutStandard?appid=" + appid + "&token=" + com.GetNewToken() + "";// //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(data));
//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();
// JObject objs = JObject.Parse(Result);
// string errorCode = objs["head"]["errorCode"].ToString();
// if (string.IsNullOrEmpty(errorCode))
// {//写入成功
// }
// else
// {//写入失败
// com.JD_Error("订单:" + orderno + ",写入StageHead表失败:" + objs["head"]["transMessage"].ToString());
// }
//}
http链接中请求进行编码,Http请求的更多相关文章
- JAVA获取请求链接中所有参数(GET请求)
Enumeration<String> paraNames=request.getParameterNames(); for(Enumeration<String> e=par ...
- js处理url中的请求参数(编码/解码)
在处理 a 链接跳转其他页面时,总会遇到需要传递一些当前页面的信息到其他页面,然后其他页面利用这些信息进行相关操作.利用 get 请求或 hash 传递是常见的方式. 首先,需要对传递的参数进行编码, ...
- urllib库中的URL编码解码和GETPOST请求
在urllib库的使用过程中,会在请求发送之前按照发送请求的方式进行编码处理,来使得传递的参数更加的安全,也更加符合模拟浏览器发送请求的形式.这就需要用urllib中的parse模块.parse的使用 ...
- Ecstore中如何调用发起Ajax请求
Ecstore的JS框架使用了mootools,所以ajax调用也使用mootools中的Request组件. 语法: var myRequest = new Request([options]); ...
- C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)
这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现.在很多地方都需要验证用户身份才可 ...
- 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需 要获取认证信息(如Cookie),所以返回的是HttpWeb ...
- jQuery中的Ajax几种请求方式
1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中. url (String) : 请求的HTML页的URL地址. data (M ...
- (转) 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
转自:http://blog.csdn.net/zhoufoxcn/article/details/6404236 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中 ...
- 【转】在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
http://zhoufoxcn.blog.51cto.com/792419/561934 这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全 ...
- 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求【转载】
标签:C# HTTPS HttpWebRequest HTTP HttpWebResponse 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...
随机推荐
- 类的operator new与operator delete的重载【转】
http://www.cnblogs.com/luxiaoxun/archive/2012/08/11/2633423.html 为什么有必要写自己的operator new和operator del ...
- SVN的配置与使用方法
1.所选服务器安装包:VisualSVN-Server-2.1.3.msi. 2.客户端安装包:TortoiseSVN-1.6.2.16344-win32-svn-1.6.2.msi 一.服务器的安装 ...
- 图像处理之基础---图像缩放中的双线性插值c实现
在进入频域变换之前, 我们还是轻松一下,再搞点平面上的变化来看看.这把选了一个双线性插值(Bilinear interpolation)来实现是源于看到了csdn上别人的问题, 权且实现一个函数,方便 ...
- 2016/2/18 html 图片热点,网页划区,拼接,表单
①图片热点 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 显示 ②网页划区 在一个网页里,规划出一个区域用来展示另一个网页的内容. ③网页拼接 在一个网络页面内,规划 ...
- UVA-10163 Storage Keepers DP
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- python包格式
1 egg和wheel 前者扩展名是.egg,后者扩展名是.whl 它们都是python的模块.后者用来替换前者. wheel是轮子的意思,就是说,有了.whl包就不需要重新再造轮子了.
- 【OI】关于斯特林数的简单理解
斯特林数分为第一类斯特林数:S1(n,k)和第二类斯特林数:S2(n,k). S1(n,k)代表在n个元素中选出k个环的方案数,S2(n,k)代表在n个元素中选出k个非空集合的方案数, 不同之处在于, ...
- 说说循环与闭包——《你不知道的JS》读书笔记(一)
什么是闭包 <你不知道的JS>里有对闭包的定义:"当函数可以记住并访问所在的词法作用域,即使函数是在当前作用域之外执行,这就产生了闭包." 讲闭包是啥的太多了...就一 ...
- Vijos 1193 扫雷 【动态规划】
扫雷 描述 相信大家都玩过扫雷的游戏.那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它 ...
- GeHost powershell
PS C:\Users\clu\Desktop> [System.Net.Dns] | Get-Member -Static | Format-Table -AutoSize TypeName: ...