2012-07-25 4 views
2

나는 프로그래밍 (C#을)에 새로 온 사람과 나는이 주제에 대해 많은 질문을 발견사용하여 웹 사이트의 HttpWebRequest에 로그인

MMORPG 프로그래밍 웹 사이트와 물건과 통신 배울 수있는 봇을 ... 쓰기 시작 여기 저기에.

public static CookieCollection GetCookie(HttpWebRequest request) 
    { 

     if (request.CookieContainer == null) 
     { return new CookieContainer().GetCookies(request.RequestUri); } 
     else 
     { return request.CookieContainer.GetCookies(request.RequestUri); } 
    } 


    public static CookieContainer GetCookie(HttpWebResponse response) 
    { 

     CookieContainer cookiecontainer = new CookieContainer(); 
     cookiecontainer.Add(response.Cookies); 

     return cookiecontainer; 
    } 


    public static void SetCookie(HttpWebRequest request, CookieContainer cookie) 
    { 
     request.CookieContainer = cookie; 
    } 


    public static void SetCookie(HttpWebResponse response, CookieCollection cookie) 
    { 
     response.Cookies = cookie; 
    } 


    public static HttpWebResponse PostData(string uri,string request,CookieContainer cookie) 
    { 
     HttpWebRequest httprequest; 
     byte[] requestbytes; 
     Stream requeststream; 
     HttpWebResponse httpresponse; 

     httprequest = (HttpWebRequest)HttpWebRequest.Create(uri); 

     if (cookie == null) 
     {httprequest.CookieContainer=new CookieContainer();} 
     else 
     {httprequest.CookieContainer=cookie;} 

     httprequest.Method = "POST"; 
     httprequest.ContentType = "application/x-www-form-urlencoded"; 
     httprequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19"; 
     requestbytes = ASCIIEncoding.ASCII.GetBytes(request); 
     httprequest.ContentLength = requestbytes.Length; 

     requeststream=httprequest.GetRequestStream(); 
     requeststream.Write(requestbytes,0,requestbytes.Length); 
     requeststream.Close(); 

     httpresponse=(HttpWebResponse)httprequest.GetResponse(); 

     if (!(httpresponse.Cookies.Count>0)) 
     { SetCookie(httpresponse, GetCookie(httprequest)); } 

     return httpresponse; 
    } 


    public static HttpWebResponse GetData(string uri, CookieContainer cookie) 
    { 
     HttpWebRequest httprequest; 
     HttpWebResponse httpresponse; 

     httprequest = (HttpWebRequest)HttpWebRequest.Create(uri); 

     if (cookie == null) 
     { httprequest.CookieContainer = new CookieContainer(); } 
     else 
     { httprequest.CookieContainer = cookie; } 

     httprequest.Method = "GET"; 
     httprequest.ContentType = "application/x-www-form-urlencoded"; 
     httprequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19"; 

     httpresponse = (HttpWebResponse)httprequest.GetResponse(); 

     if (!(httpresponse.Cookies.Count > 0)) 
     { SetCookie(httpresponse, GetCookie(httprequest)); } 

     return httpresponse; 
    } 

주 :

 string uri = "http://s2.kingsera.org"; 
     string userName = "someUserName"; 
     string passWord = "somePassWord"; 

     string postData = "signinUsername=" + userName + "&signinPassword=" + passWord + "&signinRemember=remember"; 
     CookieContainer cookie = new CookieContainer(); 

     HttpWebResponse response = PostData(uri, postData, cookie); 

     CookieContainer c = GetCookie(response); 

그것은이 보인다 도움의 손으로 마지막으로, 나는 불행하게도

mothods :(작동하지 않는, 그것을 무언가를 찾아 완료 할 수 로그인 페이지가 더 복잡해지기 위해 무엇인가하고 있습니다. 감사합니다. 미리.

+0

[httpWebRequest.Credentials] (http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.credentials.aspx) 속성에서 아무 것도 설정하지 않았습니다. – Amicable

+0

음, 사실 나는 가지고 있습니다. 그러나 그것은 그 계급의 모범에서 본 것들과 같지 않습니다. – Musketeer

답변

0

기술적으로 질문에 답변하지는 않겠지 만, 이와 비슷한 문제가 발생하면 컴퓨터와 원격 서버 간의 웹 트래픽을 차단하는 Fiddler으로 전환합니다.

이렇게하면 브라우저가 원격 서버에 보내는 모든 요청 (헤더, 쿠키 데이터 등)과 코드가 원격 서버에 요청한 내용을 볼 수 있습니다.

두 요청의 차이점은 문제를 해결하는 방법을 보여 주거나 적어도 문제 해결을위한 많은 추가 정보를 제공해야합니다.

+0

힌트를 보내 주셔서 감사합니다. TamperData 및 Firebug와 다소 비슷합니다. – Musketeer

+0

@Musketeer 매우 좋아 - 나는 TamperData에 익숙하지 않지만 Firebug의 네트워크 탭과 거의 동일하지만 모든 HTTP 트래픽에 대해이를 수행하므로 비교를 통해 요청을 체크 아웃하는 것이 좋습니다. 대상 사이트에서 브라우저 요청 문자열이나 다른 부분을 확인하는 경우 일 수도 있습니다. 자기 동일 요청을 속일 수 있다면 똑같은 응답을 얻을 것입니다. – glenatron

관련 문제