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()
...全文
714 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 —— 这些楼主都带上了么?
内容概要:本文基于Matlab/Simulink平台,对电励磁同步电机在异步牵入、稳态运行及能耗制动三个阶段的全周期动态特性进行建模仿真与系统研究。研究构建了完整的电机数学模型与仿真系统,重点分析了电机从异步启动到同步运行的过渡过程、稳态运行时的电磁与机械性能,以及执行能耗制动时的减速特性与能量耗散机理。通过仿真,揭示了励磁电流、负载转矩与转速在不同工况下的动态响应规律与耦合关系,为电机的控制策略设计与性能优化提供了理论依据和数据支持。; 适合人群:具备电机学、电力电子与电力拖动基础知识的电气工程及相关专业的研究生、科研人员与工程技术人员。; 使用场景及目标:①研究电励磁同步电机的启动特性,解决异步牵入过程不稳定或失败的问题;②分析电机在不同负载下的稳态运行性能,优化运行效率;③设计和验证能耗制动策略,精确控制制动过程的减速时间和能量消耗。; 阅读建议:在学习过程中,应结合电机的基本原理,深入理解仿真模型中各模块(如电机本体、励磁控制、负载模型)的搭建逻辑,并通过调整仿真参数(如励磁电压、负载大小)来观察和分析系统动态响应,以加深对电机全周期运行特性的理解。
内容概要:通过介绍短时倒谱(Cepstrogram)计算方法,开展时-倒频分析研究,深入探讨倒谱分析机理、短时倒谱构建逻辑及时-倒频分析的内涵。文中系统对比了时-倒频分析与全局倒谱、传统时频分析方法的差异,阐明其在卷积特征解耦、非平稳信号跟踪、微弱周期特征增强及多维特征融合方面的技术优势,并分析其在语音识别、机械故障诊断、音频处理和非平稳时序信号分析中的典型应用,同时指出其在分辨率、计算复杂度等方面的局限性并提出优化方向。; 适合人群:具备一定信号处理或数据分析基础,从事机械、通信、声学或自动化等领域研究的研发人员及研究生。; 使用场景及目标:① 掌握短时倒谱与时-倒频分析的理论基础与实现方法;② 应用于语音信号处理、机械设备故障诊断、音频相似性检测等工程实践;③ 对比传统方法,提升对复杂非平稳信号中隐含周期特征的识别能力; 阅读建议:此资源以Matlab代码实现为核心,强调理论与实践结合,建议读者在理解核心算法原理的基础上,动手运行代码并调试参数,结合具体应用场景深化对方法适用性与局限性的认识。

111,128

社区成员

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

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

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