博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用HttpWebRequest post数据时要注意UrlEncode
阅读量:6701 次
发布时间:2019-06-25

本文共 2427 字,大约阅读时间需要 8 分钟。

今天在用HttpWebResponse类向一个远程页面post数据时,遇到了一个怪问题:通过对比自己post的参数和服务器接收到的值,发现参数中的一个+号被替换成了空格

造成这个错误的原因在于+号在url中是特殊字符,远程服务器在接受request的时候,把+转成了空格。同样的,如果想post的数据中有&、%等等,也会被服务器转义,所以我们在post的数据的时候,需要先把数据UrlEncode一下。url  encode在bs开发中本来是一个很常见的问题。

修改后的post数据的示例代码如下:

public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary
parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (requestEncoding == null) { throw new ArgumentNullException("requestEncoding"); } HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } if (cookies != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); } //如果需要POST数据 if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); } i++; } var postData = string.Join("&", parameters.Select( p => string.Format("{0}={1}", p.Key, System.Web.HttpUtility.UrlEncode(p.Value, requestEncoding))).ToArray()); byte[] data = requestEncoding.GetBytes(postData); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } return request.GetResponse() as HttpWebResponse; }

转载于:https://www.cnblogs.com/fyq891014/p/4188772.html

你可能感兴趣的文章
java MD5加密
查看>>
mysql多实例
查看>>
购物商城Web开发第二十三天
查看>>
我的Android进阶之旅------>Android利用温度传感器实现带动画效果的电子温度计
查看>>
Selenium UI 举例 getCssValue
查看>>
Kickstart Practice Round 2017---A
查看>>
Q-Dir
查看>>
Algs4-1.4.18数组的局部最小元素
查看>>
Algs4-1.4.38 3-sum的初级算法与ThreeSum性能比较
查看>>
谁获得了最高奖学金
查看>>
CODING 受邀参加《腾讯全球数字生态大会》
查看>>
python3基础3--数据类型--数据运算--表达式if -else-while-for
查看>>
如何学习前端 转载
查看>>
性能测试的重要意义(一)
查看>>
简单的文件上传功能实现(java)
查看>>
MySQL的简单使用
查看>>
浮动问题
查看>>
hausaufgabe--python 18- Defined specific Functions
查看>>
Django的视图层
查看>>
如何open一个新tab页面
查看>>