作者pkmu8426 (巴426)
看板C_Sharp
标题[心得] WebRequest 与 HttpWebRequest POST
时间Mon May 4 21:29:37 2015
事情是这样的 长话短说 因为觉得或许有帮助
就在这留个记录。
原先我的winform程式 会在每次启动时post资料到server网页端做验证
经过一段时间压力测试、修修改改也都趋於正常。
最近一段时间却频繁发生验证无法通过 接收的资料都是空的状况。
不是逾时的问题, 我timeout时间都拉10秒以上。
今天发现原来是使用的HttpWebRequest, 突然不能用於这段post验证。
後来改用WebRequest 就正常了。
其实逻辑统统一样, 所以我也只改了一个class宣告罢了。
原因为何? 老实说不知道发生原因。
但是看了Catch的讯息 推测是双方协定不对等, 造成post没反应,
连http code都不会取得。
至於为何协定突然不对等, 可能原因有很多, 微软本身的更新、server端的更新、
网路端机制的更新等等等。
结论的话... 觉得有些class还是要慎用, 尽量采用基底class,
少用新潮的class, 维护上比较不易出状况。
另外 经常对class能处理的程度要时常抱持怀疑心,
像datetime其实非常容易受到使用者环境影响,
右下角时间格式设定的改动可能会造成错误。
CurltureInfo判断语系也是, 是非常不受信任的机制,
简体语系也能判断成繁体语系, 很容易造成表面上的误判。
真心觉得微软对这方面的防呆要多加强。
-------------------------------------------------
修正 今天发现 原来是server domain被挡掉了
只是我在修正测试的同时 server恢复正常了....
所以本篇 HttpWebrequest 还是可以用的。
-------------------------------------------------
2015/05/02
最近又发生post逾时 网页可以开 但C#程式post不过去
实际写一只ajax跨网域去post也可以成功。
後来想说看看网页端的header是怎麽设定, 照做一次。
发现把Webrequest.useragent 属性指定如下, 就可以连线了。
htw_req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.3";
(如不确定整串内容 可以自行用浏览器包的开发者工具去观察封包的header)
如果这个属性预设未指定, print出来会是null。(但背後会不会被另外处理就不知)
--
就算这个世界不信任我
但我还是想相信这个世界
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.38.35.156
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1430746183.A.B73.html
※ 编辑: pkmu8426 (114.38.35.156), 05/04/2015 21:33:32
1F:推 GoalBased: 同意要抱持着怀疑的心,不过如果能理解该class在 05/04 22:27
2F:→ GoalBased: 做甚麽应该就不容易发生误用德状况 05/04 22:28
这可能要实际看class或者爬文件 才能知道一些基底class
到底是用那些系统记录做判断
3F:推 Litfal: 这应该不一定是微软的问题吧... 05/04 22:46
4F:→ Litfal: 然後WebRequest是抽象基底类别... 05/04 22:49
没错 我知道他是抽象类 但说实在 我目前没分清两者细微的差别
只知道基本上能达到的功能都一致。
※ 编辑: pkmu8426 (59.126.254.103), 05/05/2015 11:27:43
※ 编辑: pkmu8426 (59.126.254.103), 05/12/2015 21:55:12