httpwebrequest post时,带有传request payload数据时,一直提示:“基础连接已经关闭: 连接被意外关闭”

lijian910wolf 2018-07-12 07:56:40
各位坛友好:功能就是想通过POST来让路由器断网,通过网页分析,断网需要提供链接地址,另外还要post一段数据,Request Payload,它的内容不是xml也不是json,从网页上提示看就是一串字符串:wan -linkdown,现在问题就是出在提交这串内容上,只要一提交带内容就会异常“基础连接已经关闭: 连接被意外关闭””


下面部分主要代码如下:路过的高手伙伴,注意看代码里的注释说明
首先说明下,将要POST的内容是字符串,不是JSON格式的数据,Request Payload内容是:“wan -linkdown”

HttpWebRequest request = null;
HttpWebResponse response = null;
request = WebRequest.Create(url) as HttpWebRequest;
string data = "";
byte[] b = null;
if (package.bjson)
{
data = JoinParams(package.Params);//将数据转换为json格式数据
b = package.Encoding.GetBytes(data);
}
else
{
b = package.Encoding.GetBytes(package.RequestPayload);//执行这里package.RequestPayload=“wan -linkdown”
}

//下面的配置都是根据网页上抓的HTTP HEAD包填写的
request.ContentType = "text/html;charset=UTF-8";// application/x-www-form-urlencoded;text/plain;charset=UTF-8
request.Accept = package.Accept;
//request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MALCJS; rv:11.0) like Gecko";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
request.CookieContainer = Cookie;
request.Referer = package.RefererURL;
request.Method = method;

request.AllowWriteStreamBuffering = true;
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
request.Headers.Add("Accept-Encoding", "gzip,deflate");
request.Headers.Add("Access-Control-Allow-Origin", "*");
request.Headers.Add("Cache-control", "no-cache");

//request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
request.KeepAlive = true;
request.ProtocolVersion = HttpVersion.Version10;//

request.ContentLength = b.Length;

//注意:当b这个值有实际内容时,如果上面不加request.ProtocolVersion = HttpVersion.Version10;这句,那下面的request.GetRequestStream();这句代码就提示“基础连接已经关闭: 连接被意外关闭”,变量b无值时不会
Stream Requeststream = request.GetRequestStream();
Requeststream.Write(b, 0, b.Length);
Requeststream.Close();

//注意:同样的当b变量有实际值时,加了request.ProtocolVersion = HttpVersion.Version10;这句,这面的代码运行正常,但是到下面request.GetResponse() 又出现了"基础连接已经关闭: 连接被意外关闭”,求教各位伙伴高手
response = request.GetResponse() as HttpWebResponse;

Stream Responsestream = response.GetResponseStream();
。。。。。。。
各个申请的对象都有abort() 及close()
...全文
633 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
吹风的兔子 2018-07-21
  • 打赏
  • 举报
回复
https://www.cnblogs.com/shuxiaolong/p/20160717_0305.html
《『备忘』HttpWebRequest 在 POST 提交时, 标头(Headers)丢失原因》


核心注意事项:

一定不要设置 HttpWebRequest.ContentLength 这个字段。手动设置 这个字段 将导致 标头(Header)丢失【尤其是 自定义标头丢失】。


莫非和楼主遇到了同样的原因?
lijian910wolf 2018-07-14
  • 打赏
  • 举报
回复
感谢大家
问题解决了。
request.ContentLength把这个去掉就好了
lijian910wolf 2018-07-14
  • 打赏
  • 举报
回复
引用 5 楼 qiaohuyue 的回复:
HttpVersion.Version10 =》HttpVersion.Version11

https://msdn.microsoft.com/zh-cn/biztalk/system.net.httpversion

看下。 最后在释放流。


谢谢,11版本是针对https的,如果不加HttpVersion.Version10,然后只要往request写带有内容的,GetRequestStream()马上异常“基础连接已关闭。。。。”

现在有点可以确认:只要代码里request.ContentLength这个值赋值了大于0的,然后request.GetRequestStream();或者request.GetResponse();的话就会出现“基础连接已经关闭: 连接被意外关闭”这个异常。
先前就是在前面加了个HttpVersion.Version10这个,解决了request.GetRequestStream();时不出现异常,但是在后面调用request.GetResponse();还是出现了异常。
XBodhi. 2018-07-13
  • 打赏
  • 举报
回复
HttpVersion.Version10 =》HttpVersion.Version11

https://msdn.microsoft.com/zh-cn/biztalk/system.net.httpversion

看下。 最后在释放流。
  • 打赏
  • 举报
回复
贴出你的 http 调试画面,贴出你的服务器端调试画面。贴客户端代码没多大用,只会抄代码不会调试不行。
lijian910wolf 2018-07-13
  • 打赏
  • 举报
回复
引用 1 楼 sxl514286339 的回复:
模拟登录路由器的过程,模拟操作路由器的网站,模拟点击 “断网” 按钮。

问题来了:
楼主 模拟登录了么?
模拟登录之后,是需要 保存 Cookie 的

发送请求时:要带上 Cookie,Header —— 这些楼主都带上了么?


您好,肯定是已经登录成功了,登录的时候POST, Request Payload里是空的,所以没问题。
现在的问题就是断网的时候,它的Request payload里有内容,结果就是POST时出现上面的问题,如果不带内容进行POST,它能POST成功,但是返回来结果就是断网失败。
lijian910wolf 2018-07-13
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
贴出你的 http 调试画面,贴出你的服务器端调试画面。贴客户端代码没多大用,只会抄代码不会调试不行。


您好,您说的HTTP调试画面是指什么?
这边没有服务器端,待连接的就是路由器 192.168.1.1, 要实现的就是模拟浏览器登录路由器然后断网。
这边只有客户端,您说的是什么?
吹风的兔子 2018-07-12
  • 打赏
  • 举报
回复
模拟登录路由器的过程,模拟操作路由器的网站,模拟点击 “断网” 按钮。

问题来了:
楼主 模拟登录了么?
模拟登录之后,是需要 保存 Cookie 的

发送请求时:要带上 Cookie,Header —— 这些楼主都带上了么?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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