[心得] WebRequest 與 HttpWebRequest POST
事情是這樣的 長話短說 因為覺得或許有幫助
就在這留個記錄。
原先我的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://www.ptt.cc/bbs/C_Sharp/M.1430746183.A.B73.html
※ 編輯: pkmu8426 (114.38.35.156), 05/04/2015 21:33:32
推
05/04 22:27, , 1F
05/04 22:27, 1F
→
05/04 22:28, , 2F
05/04 22:28, 2F
這可能要實際看class或者爬文件 才能知道一些基底class
到底是用那些系統記錄做判斷
推
05/04 22:46, , 3F
05/04 22:46, 3F
→
05/04 22:49, , 4F
05/04 22:49, 4F
沒錯 我知道他是抽象類 但說實在 我目前沒分清兩者細微的差別
只知道基本上能達到的功能都一致。
※ 編輯: pkmu8426 (59.126.254.103), 05/05/2015 11:27:43
※ 編輯: pkmu8426 (59.126.254.103), 05/12/2015 21:55:12
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章