2014-01-13 1 views
0

콘솔 데이터의 사용자 이름 &을 전달하여 콘솔의 Https 사이트에 로그인하고 싶습니다. 그러나 나는 이것을 할 수 없다. 내가 알기로는 '잘못된 사용자 이름/비밀번호'의 사례를 다루는 페이지입니다. 많이 찾았지만이 문제를 해결할 수 없습니다. 난 내가에만 응답 문자열을 저장 스트림 클래스를 사용하고SSL 사이트에 로그인했는데 실패했습니다.

 CookieContainer CC = new CookieContainer(); 

     WebRequest request = WebRequest.Create("https://the websit link is here!"); 
     request.Proxy = null; 
     request.Credentials = CredentialCache.DefaultCredentials; 

     //allows for validation of SSL certificates 

     ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateServerCertificate); 
     Console.WriteLine("\n"); 
     Console.WriteLine("Enter your Email/Username :- "); 
     string username = Console.ReadLine(); 

     Console.WriteLine("Enter your password :- "); 
     string password = Console.ReadLine(); 

     string postData = String.Format("username={0}&password={1}", username, password); 
     HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create("https://the login page link of the website here! "); 

     getRequest.Method = WebRequestMethods.Http.Post; 
     getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 

     byte[] byteArray = Encoding.ASCII.GetBytes(postData); 
     Stream newStream = getRequest.GetRequestStream(); //open connection 
     newStream.Write(byteArray, 0, byteArray.Length); // Send the data. 
     newStream.Close(); 

     HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse(); 
     //  getRequest.CookieContainer.Add(getResponse.Cookies); 
     string responseString = new StreamReader(getResponse.GetResponseStream()).ReadToEnd(); 

     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     Stream dataStream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(dataStream); 



     Console.WriteLine("Reader Object(StreamReader): " + reader); 
     string responseStr = reader.ToString(); 

     string responseFromServer = reader.ReadToEnd(); 


     Console.WriteLine("\nWriting to file..."); 
     StreamWriter file = new StreamWriter("E:\\I'M Response_FinalTry.html"); 
     try 
     { 
      for (int i = 0; i < responseFromServer.Length; i++) 
      { 
       file.Write(responseFromServer[i]); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Caught Exception is: " + e); 
     } 
     finally 
     { 
      Console.WriteLine("Closing file..."); 
      file.Close(); 
      Console.WriteLine("Done..!!"); 
     } 


    } 

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     return true; 
    } 

... 내가 다루고있어 현재 코드를 공유하고 있습니다 .. 통과는 SSL에 의해 성공적으로이 여전히 잘못된 페이지로 남아/페이지에서 서버 .. 나는 서버 측 코드가 없다 ... 친절하게,이 호에서 나를 안내해라 .... :)

+0

당신이 UTF8에서 'postData를'바이트 배열을 받고 보내는 시도? 또한 콘텐츠 유형의 유효성을 검사하십시오. 확인 : http://msdn.microsoft.com/en-us/library/debx8sh9(v=vs.110).aspx –

답변

0

나는 당신이 코드를 작동하도록 :

getRequest.ContentType = "application/x-www-form-urlencoded"; 
byte[] byteArray = Encoding.UTF8.GetBytes(postData); 

참조 : http://msdn.microsoft.com/en-us/library/debx8sh9(v=vs.110).aspx

편집 :

이 경우 WebClient 클래스를 사용할 수 있습니까?

using System.Net; 
using System.Collections.Specialized; 

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection(); 
    values["username"] = "user1"; 
    values["password"] = "12345"; 

    var response = client.UploadValues("https://www.mydomain.com/login.aspx", values); 

    var responseString = Encoding.Default.GetString(response); 
} 

출처 : HTTP request with post

+0

고마워,하지만 실제로이 코드를 적용했지만 문제는 그것이 "페이스 북을 위해 잘 작동합니다. co.kr "과 다른 사이트들도 있지만"로컬 서버에서 "작동하고 싶습니다. 예 : 대학의 자체 서버. 그래서, 그것이 주요 문제입니다. – Zeeshan

+0

해당 서버에 HTTPS를 사용하고 있습니까? 관련이 없지만 HTTPS 인증서가 신뢰할 수 있습니까? –

+0

예, 확실히 Https이고 프로그래밍 방식으로 로그인하고 싶습니다 ... 성공적으로 Https를 통해 인증서를 통과했습니다 ... – Zeeshan

관련 문제