2011-06-18 37 views
2

我想在ASP.NET中創建一個頁面,將請求發送到另一個非ASP.NET URL,並檢查那裏的內容,在我的情況下是檢查,是域名免費,或已在使用中。 (Method = POST)因此,我想要獲取HTML代碼,從中我將使用RegEx提取結果。最後一部分,我可以做我自己:)))向ASP.NET中的另一個URL發送請求

回答

3

你可以使用一個WebClient發送POST請求,並獲取遠程資源的內容:

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection 
    { 
     { "param1", "value 1" }, 
     { "param2", "value 2" }, 
    }; 
    byte[] result = client.UploadValues("http://example.com/foo", values); 
    // TODO: process the results 
} 

從中我會提取結果,使用RegEx。最後一部分,我可以自己做:)

我希望你能意識到關於parsing HTML with Regex的一般意見。所以即使你自己可以這樣做,不要這樣做。使用HTML解析器(如HTML Agility Pack)來處理結果。

+0

謝謝。 抱歉的愚蠢問題,但我不明白我在哪裏可以指定我發佈的網址? client.UploadValues(「http://my.url」,values); ??? –

+0

@Armen Sarkisian,是的,你將它指定爲'UploadValues'方法的第一個參數。 –

+0

謝謝,我現在就來試試:) –

0

我的最終代碼如下所示。正如你所說RegEx沒有工作,我用簡單的IndexOf

 string domain = tb_domain.Text; 
     string level = ddl_level.SelectedValue; 
     string html = ""; 

     using (var client = new WebClient()) 
     { 
      var values = new NameValueCollection 
      { 
       { "whois_search", domain }, 
       { "domainEnd", level }, 
      }; 


      byte[] res = client.UploadValues("http://registration.ge/index.php?page=11&lang=geo", values); 
      for (int i = 0; i < res.Length; i++) 
      { 
       int a = Convert.ToInt32(res[i]); 
       char c = Convert.ToChar(a); 
       html += Convert.ToString(c); 
      } 

      int ind = html.IndexOf("Registrant"); 

      if (ind == -1) 
      { 
       lbl_result.Text = "The domain is free, you can register it"; 
       lbl_result.ForeColor = System.Drawing.Color.Green; 
      } 
      else 
      { 
       lbl_result.Text = "The Domain is used"; 
       lbl_result.ForeColor = System.Drawing.Color.Red; 
      } 
     }