星期四, 3月 15, 2012

c# webrequest二三事

前幾天遇到的一些問題跟解:
  • 要對ASP.Net網頁做POST,因為有ViewState的關係,沒辦法像一般簡單的HTML form那樣做,需要先讀取網頁之後,取出裡面的__VIEWSTATE 跟__EVENTVALIDATION ,再加上你要填的內容去重新組出網址,才可以正確地POST。參考自:C#的HttpWebRequest编程,支持带ViewState的网页POST请求通过HTTP抓包,深入理解ASP.NET WebForm ViewState
  • 需要使用帶有Cookie的HttpWebRequest,HttpWebRequest有個CookieContainer可以用,所以套上Cookie即可,參考自:WebClient 保持 Session 和 Cookie,基本上就套它的HttpClient。
  • Cookie怎麼來?除了可以透過WebBrowser控制項去撈以外,也可以用Win32 API:InternetGetCookieEx()去撈,我用WebBrowser控制項撈出來的有問題,後來就改用Win32API的InternetGetCookieEx()就行了。參考自:请问如何自动获取cookieContainer.Add()中的值Is it possible to transfer authentication from Webbrowser to WebRequest
  • utf-8轉big5的問題,轉了以後都放在字串裡,因為要拿來組網址,要使用Uri.EscapeDataString(),卻發現輸出結果一樣。沒辦法,只好自己來。首先先套轉換的過程,但是不要放回string,而是拿byte[]來用,拿來以後,取得每個byte的16進位,在前面加上 '%' ,再組成字串,就可以拿來組網址。不知道有沒有什麼例外情況需要處理,又懶得去翻RFC,總之,試的結果是可以,沒問題,就先這樣用吧。

沒有留言: