2014-10-05 1 views
0

좋아요, 스택 오버플로를 살펴 봤는데 100 %가 내가 가진 문제에 대한 답변을 찾지 못했습니다. 현재 알려진 사이트에 대한 자동 로그인을하고 있습니다. e926.net과 그들이 로그인을 처리하는 방법에 문제가 있습니다.HTTPWebRequest의 VB.NET 쿠키

업데이트 된 질문 : (https://stackoverflow.com/questions/26200801/httpwebrequest-cookies-and-authorization-tokens) 참고 :이 질문에 대한 중요한 정보는 아직 있습니다.

는 지금은이 코드를 사용하고 있습니다 : 그것은 코드가 발견하고 내가 불행하게도 링크를 잊고 다른 사이트에서 수정 된

Sub Client() 
    Dim webRequest As HttpWebRequest 
    Dim responseReader As StreamReader 
    Dim responseData As String 
    Dim postData As String = "authenticity_token=ubL5PfTzyrvhB%2Bb1A2MISb2IUZxsEadmZWc0z7Gs2qA%3D&url=&user%5Bname%5D=USERNAME&user%5Bpassword%5D=PASSWORD&user%5Broaming%5D=0" 
    Dim cookies As CookieContainer = New CookieContainer() 
    Dim requestWriter As StreamWriter 
    Dim strUrl As String = Nothing 
    Dim strRequestedHTML As String 

    Try 
     'get login page with cookies 
     strUrl = "https://e926.net/user/login" 
     webRequest = HttpWebRequest.Create(strUrl) 
     webRequest.AllowAutoRedirect = True 
     webRequest.CookieContainer = cookies 

     'recieve non-authenticated cookie 
     webRequest.GetResponse().Close() 

     'post form data to page 
     strUrl = "https://e926.net/user/authenticate" 
     webRequest = HttpWebRequest.Create(strUrl) 
     webRequest.AllowAutoRedirect = True 
     webRequest.Method = WebRequestMethods.Http.Post 
     webRequest.ContentType = "application/x-www-form-urlencoded" 
     'webRequest.CookieContainer = cookies 
     webRequest.ContentLength = postData.Length 

     requestWriter = New StreamWriter(webRequest.GetRequestStream) 
     requestWriter.Write(postData) 
     requestWriter.Close() 

     'recieve authenticated cookie 
     webRequest.GetResponse().Close() 

     'now we get the authenticated page 
     webRequest = HttpWebRequest.Create("https://e926.net/post") 
     webRequest.CookieContainer = cookies 
     responseReader = New StreamReader(webRequest.GetResponse.GetResponseStream()) 
     responseData = responseReader.ReadToEnd() 
     responseReader.Close() 
     strRequestedHTML = responseData 
     My.Computer.Clipboard.SetText(strRequestedHTML) 

    Catch ex As Exception 
     MsgBox("<br />There was an error going to this site: " + strUrl + "<br> Error: " + ex.Message) 
     Return 
    End Try 
End Sub 

, 그러나 나는에 그것을 시도 처음 5 개 사이트에서 잘 근무하고있다 그러나 E926은 '로그인'페이지에서 세부 정보를 가져 와서 '인증'페이지로 리디렉션하므로 프로그램이 쿠키를 제대로 전송하지 않아 '로그인'의 정보를 전송할 수없는 것처럼 보입니다. 저는 '바이올린 2'를보고 '쿠키'와 그 정보가 실제로 어떻게 페이지에 전송되는지에 대한 아이디어를 얻었습니다. 쿠키가 누락되었다는 것이 분명해 보입니다. 나는 ' 인증 토큰 '으로 표시되며 변경된 내용은 본 적이 없지만 숨겨진 양식의'로그인 '페이지에 표시됩니다.

제 질문은 로그인 프로세스가 올바르게 수행되도록 쿠키를 어떻게 전송할 수 있습니까? 그 것이 내 문제입니까, 아니면 문제를 일으키는 다른 것입니까?

편집 : IE에서 헤더 : 프로그램에서 https://docs.google.com/document/d/1UPf2vzPF11Q-i_3xSkZmdN1dfqFZX4ydyAZhVeQlh94/edit?usp=sharing

헤더/그 코드 : https://docs.google.com/document/d/1ltZo3JZLt4sZiwZBltfqqParb3H86qi62I0KZN5t_VE/edit?usp=sharing

+0

사이드 노트 : 로그인 시스템이 _ 완전하게 안전하지 않습니다. – SLaks

+0

그래, 몇 번이나 내가 그 사이트에서 일해야 할 때, 나는 데이트 된 암호와 사용자 이름을 사용한다고 생각했습니다. – user2994429

답변

0

당신은 당신이 실제로 로그인 요청에서 쿠키를 보내고받을 수 있도록 webRequest.CookieContainer = cookies 주석을 제거해야합니다.

+0

하하, 그건 사실 디버깅의 일부였습니다. 주석 처리를 잊어 버렸습니다 .. 아직 주석 처리되지 않은 상태에서는 작동하지 않습니다. 그 작은 세부 사항을 놓친 것에 대한 사과드립니다. – user2994429

+0

@ user2994429 : 그 말을 빼면 피들러에서 무엇을 볼 수 있습니까? – SLaks

+0

다음은 올바른 헤더입니다. https://docs.google.com/document/d/1UPf2vzPF11Q-i_3xSkZmdN1dfqFZX4ydyAZhVeQlh94/edit?usp=sharing 다음 내용은 다음과 같습니다. https://docs.google.com/document/d/1ltZo3JZLt4sZiwZBltfqqParb3H86qi62I0KZN5t_VE/edit? usp = sharing – user2994429