none
如何自動傳值給特定的網頁並分析其查詢結果 RRS feed

  • 問題

  • 想做一個功能     是希望能從資料庫一筆一筆將欲查詢的資料傳至某網站
    並分析查詢結果記錄到資料庫中    請問這種類型的程式該如何下手?
     
     
    請問有相關參考範例或網站嗎   謝謝!
     
    2007年7月20日 上午 09:10

所有回覆

  • 實在不了 .

     

    若要送資料到另一個網站,可以用 HttpWebRequest 來傳 .

    如果結果也來自那個網站,則可用 HttpWebResponse 來接值 .

     

    範例在 MSDN Library 有 .

    2007年7月20日 下午 03:14
    版主
  •  

    抱歉,可能我沒說清楚...

     

    恩 主要就是因為另外一個網站不是我寫的,也不歸我管,

    就類似台電的網站可以讓人輸入電表查電費一樣,

    現在有好幾筆電表的單號存在資料庫,想寫一支程式自動塞電表單號去台電的網站,

    然後將查詢的節果儲存起來,而且對方的網站是用POST的方式,我沒辦法用網址?參數的方式塞值...

     

    目前我想的方式是自己寫一個簡單web browser,然後將查詢回來的網頁做分析,

    可是還沒想道怎麼自動塞值去查,而且感覺這樣蠻複雜的...

     

    請問有比較簡單的方法嗎?

     

     

     

    2007年7月20日 下午 04:46
  • HttpWebRequest就可以送出Post的訊息出去了

    HttpWebReuest req =  (HttpWebReuest) WebRequest.Create(URL);    //帶入網址

    req.ContentType = "application/x-www-form-urlencoded";

    req.Method = "POST";

    req.ContentLength = 資料長度;   

    //比方說有一個input欄位叫做BillingNo,內容為12345,長度應該要輸入15,因為資料要帶BillingNo=12345

    Stream S = req.GetRequestStream();

    StreamWriter sw = new StreamWriter(S,System.Text.Encoding.ASCII);

    sw.Write(資料內容);    //例如BillingNo=12345

    sw.Close();

     

    HttpWebResponse res = (HttpWebResponse)req.GetResponse();

     

    這是同步的做法,接下來你就可以用res物件相關的Stream物件把網頁HTML碼讀出來了

    2007年7月21日 下午 02:43
  •  

    感謝回答,我在測試的時候卻發現另外一個問題,

    由於我現在上網必須透過Proxy,而且必須設定帳號密碼,

    (平常是上網開網頁的時候才會彈出輸入帳號密碼的視窗)

     

    上網找了設定proxy的方法:

    http://msdn2.microsoft.com/zh-tw/library/system.net.webproxy.getdefaultproxy(VS.80).aspx

    設定了req.Proxy = WebProxy.GetDefaultProxy();   

     

    但是卻無法指定其帳號密碼,真正執行的時候就會出現『遠端伺服器傳回一個錯誤: (407) 必須 Proxy 驗證。』

    而且還會出現『System.Net.WebProxy.GetDefaultProxy()' 已過時』的訊息,

    雖然後來改成用 WebProxy myProxy = new WebProxy("http://xxxxxxxxxx")  就可以解決過時的問題,(密碼依然無法輸入)

    不過似乎還是沒有GetDefaultProxy來的方便?  不知道有沒有更方便的方法可以設定proxy和帳號密碼的方式?

     

     

    2007年7月23日 上午 03:06
  •  

    先換了個不用認證的proxy,但是最後顯示出來的依然只是原本的網頁原始檔,而不是查詢結果原始檔,

    而且中文全部變成亂碼,有辦法改成Big5編碼嗎?    謝謝!

     

    Code Snippet

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                 Stream sr = res.GetResponseStream();

                StreamReader objReader = new StreamReader(sr);

                string sLine = "";
                 int i = 0;
                 while (sLine != null)
                 {
                    i++;
                    sLine = objReader.ReadLine();
                    if (sLine != null)
                    {
                        rtbHtmGet.Text = rtbHtmGet.Text + sLine + "\r";
                    }
                  }

     

     

    2007年7月23日 上午 04:04
  • 用System.Net.GlobalProxySelection = new WebProxy([URL],[Port]);

    System.Net.GlobalProxySelection.Credentials = new NetworkCredential([ID],[Password],[Domain]);

    就可以解決Proxy & 認證的問題了

    2007年7月28日 上午 07:24
  • 用System.Net.GlobalProxySelection = new WebProxy([URL],[Port]);

    System.Net.GlobalProxySelection.Credentials = new NetworkCredential([ID],[Password],[Domain]);

    就可以解決Proxy & 認證的問題了

    2007年7月28日 上午 07:24
  • 我的Sample是用ASCII編碼,你可以改用System.Text.Encoding.GetEncoding(950)來處理Big5

     

    2007年7月28日 上午 07:26
  • 感謝,亂碼及proxy的問題已經解決!

    不過無論如何傳回的依然只是原始網頁的htm,

     

    後來只好改用WebBrowser元件去傳送及接收來解決問題,但還是感謝各位的回答!

    2007年7月31日 上午 01:36
  • 可以請教一下,您說webbrowser 原元件,我應該要用哪些關鍵字來查詢,是.net 的嗎?
    因為我也有同樣需求,主要是想收集中油的加油站的種類但是他用post 傳值,

    所以想自動幫他下query 要的條件到post 裡讓他回傳查詢結果
    我再寫程式把結果整理起來

    感謝了

    2007年10月31日 上午 03:44