2009-07-21 2 views
2

양식 제출시 스크립트를 호출하고 HTTP POST 또는 GET을 사용하여 매개 변수를 전달하는 많은 사이트가 웹 디버거를 사용하여 전달되는 매개 변수를 찾았습니다. 이제 C#의 Windows 응용 프로그램을 통해 동일한 작업을 수행하려고합니다. 어떻게 이러한 기능을 얻을 수 있습니까?C에서 Windows 응용 프로그램을 사용하여 http 메서드 수행 #

저는 현재 C#에서 HttpWebRequest 및 HttpWebResponse 클래스를 사용하고 있습니다. 하지만로드하고 작동 시키려고하는 각 페이지에 대해 명시적인 코드를 작성해야하므로 고통입니다. 예를 들어, 사용자 이름과 암호를 PHP 페이지에 전달하고 응답을 받으면 쿠키와 페이지를 보냄으로써 사용자가 로그인했는지 여부를 식별합니다.

HttpWebRequest loginreq = createreq("http://www.indyarocks.com/mobile/index.php"); 
       String logintext = "username=" + TxtUsrname.Text + "&pass=" + TxtPasswd.Password + "&button.x=0&button.y=0"; 
       loginreq.ContentLength = logintext.Length; 
       StreamWriter writerequest = new StreamWriter(loginreq.GetRequestStream()); 
       writerequest.Write(logintext); 
       writerequest.Close(); 
       HttpWebResponse getloginpageresponse = (HttpWebResponse)loginreq.GetResponse(); 
       cookie = getloginpageresponse.Cookies[0]; 
       BinaryFormatter bf1 = new BinaryFormatter(); 
       Stream f1 = new FileStream("E:\\cookie.dat", FileMode.OpenOrCreate); 
       bf1.Serialize(f1, cookie); 
       f1.Close(); 

       string nexturl = getloginpageresponse.Headers[HttpResponseHeader.Location]; 
       StreamReader readresponse = new StreamReader(getloginpageresponse.GetResponseStream()); 
       if (nexturl == "p_mprofile.php") 
       { 
        MessageBox.Show("Login Successful"); 
        GrpMsg.IsEnabled = true; 
       } 
       else if (nexturl == "index.php?msg=1") 
       { 
        MessageBox.Show("Invalid Credentials Login again"); 
       } 

바른 길에이 내 createreq 클래스입니다

private HttpWebRequest createreq(string url) 
     { 
      HttpWebRequest temp = (HttpWebRequest)WebRequest.Create(url); 
      temp.Method = "POST"; 
      temp.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022; FDM)"; 
      temp.KeepAlive = true; 
      temp.ContentType = "application/x-www-form-urlencoded"; 
      temp.CookieContainer = new CookieContainer(); 
      temp.AllowAutoRedirect = false; 
      return temp; 
     } 

암 내가? 더 좋은 방법이 있습니까?

+0

당신이 웹 클라이언트 클래스 봤어? HttpWebRequest/Response 클래스에 포함 된 많은 배관을 포장합니다. –

답변

6

당신은 System.Net.WebClient.

당신은 당신이 원하는 어떤 방법과 헤더 요청을하고, 간단한 스트림 읽기와 결과 페이지를 얻을하는 데 사용할 수 사용해야합니다.

이 간단한 예제는 MSDN 페이지에서,하지만 것처럼 보일 수 있습니다 사용에 대한 몇 가지 샘플 코드 :

WebClient webclient= new WebClient(); 

using (StreamReader reader = new StreamReader(webclient.OpenRead("http://www.google.com"))) 
{ 
     string result = reader.ReadToEnd(); 
     // Parse web page here 
} 
+0

System.Net.WebClient의 구현에 대한 추가 예제는 어디서 찾을 수 있습니까? –

+0

그 사용법에 대한 더 많은 예는 무엇입니까? 아니면 프로그래밍 방식입니까? – womp

+0

어떻게 프로그래밍 되었습니까? MSDN에서 찾을 수 있지만 사용 예가 더 필요합니다. –

관련 문제