HttpWebRequest post参数问题

xiaowen_ly 2012-06-12 09:54:12
我用HttpWebRequest请求链接,post参数过不去,帮忙看下问题所在。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.KeepAlive = false;
req.Method = "POST";
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
req.Credentials = CredentialCache.DefaultCredentials;
req.ContentType = "application/x-form-www-urlencoded";
Encoding encode = new UTF8Encoding();

byte[] b = encode.GetBytes(string.Format("Content={0}&Type={1}&StartDate={2}&EndDate={3}", content, columnname.ToLower() == "macaddress" ? 1 : 0, DateTime.Now.AddDays(-1).Date.ToString("yyyy-MM-dd 00:00:00"), DateTime.Now.Date.ToString("yyyy-MM-dd 00:00:00")));
req.ContentLength = b.Length;
using (Stream stream = req.GetRequestStream())
{
stream.Write(b, 0, b.Length);
}

WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), encode);
string result = sr.ReadToEnd();
res.Close();
sr.Close();

其中content参数是用英文逗号分隔的mac地址,如:14:5A:05:56:F5:A8,0C:74:C2:8B:F8:AA,CC:08:E0:8C:16:BC,0C:77:1A:6E:66:FE,长度是1500个mac逗号分隔。
我看资料,很多都是给GetRequestStream() write参数的,我这样参数没post过去.第三方联调过,却是是没传过去参数。
在线等解答,谢谢
...全文
839 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cndidai 2014-08-28
  • 打赏
  • 举报
回复
确实是大神级别,膜拜中
「已注销」 2014-04-18
  • 打赏
  • 举报
回复
哈哈,xiaowen_ly果然是大神,帮我也解决了
Chyan 2012-06-12
  • 打赏
  • 举报
回复
接收方Server.UrlDecode()一下
xiaowen_ly 2012-06-12
  • 打赏
  • 举报
回复
byte[] b = encode.GetBytes(string.Format("Content={0}&Type={1}&StartDate={2}&EndDate={3}", HttpUtility.UrlEncode(content,encode), columnname.ToLower() == "macaddress" ? 1 : 0, DateTime.Now.AddDays(-1).Date.ToString("yyyy-MM-dd 00:00:00"), DateTime.Now.Date.ToString("yyyy-MM-dd 00:00:00")));
之后还是不行。我是utf-8,对方也是utf-8接受

xiaowen_ly 2012-06-12
  • 打赏
  • 举报
回复
我先试试
bdmh 2012-06-12
  • 打赏
  • 举报
回复
编一下码,接收方解码
机器人 2012-06-12
  • 打赏
  • 举报
回复
content 加上 HttpUtility.UrlEncode()
xiaowen_ly 2012-06-12
  • 打赏
  • 举报
回复
我写了一个程序部署在本地,然后HttpWebRequest post请求本地部署的页面,在vs里调试本地部署的网站,结果请求的时候调试信息表明,根本就没有post过去参数.

现在修改成以下代码,可以正确获取参数:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.KeepAlive = false;
req.Method = "POST";
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
req.Credentials = CredentialCache.DefaultCredentials;
Encoding encode = new UTF8Encoding();
using (Stream stream = req.GetRequestStream())
{
Dictionary<string, string> nvc = new Dictionary<string, string>();
nvc.Add("Content", HttpUtility.UrlEncode(content, encode));
nvc.Add("Type", "1");
nvc.Add("StartDate", DateTime.Now.AddDays(-1).Date.ToString("yyyy-MM-dd 00:00:00"));
nvc.Add("EndDate", DateTime.Now.Date.ToString("yyyy-MM-dd 00:00:00"));
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
req.ContentType = "multipart/form-data; boundary=" + boundary;
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
foreach (string key in nvc.Keys)
{
stream.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, nvc[key]);
byte[] formitembytes = encode.GetBytes(formitem);
stream.Write(formitembytes, 0, formitembytes.Length);
}
stream.Write(boundarybytes, 0, boundarybytes.Length);
byte[] trailer = Encoding.ASCII.GetBytes("\r\nContent-Type: application/x-form-www-urlencoded\r\n\r\n\r\n--" + boundary + "--\r\n");
stream.Write(trailer, 0, trailer.Length);
}

WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), encode);
string result = sr.ReadToEnd();

供大家参考.

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧