2013-05-21 4 views
0

다른 예제를 발견했지만 작동하지 못했습니다.WebClient를 사용하여 로그인하고 파일을 다운로드하십시오.

기본적으로 나는 웹 링크에서 문서를 생성 할 수있는 인트라넷 시스템을 가지고 있으며 다운로드 할 항목을 알고 있습니다. 다운로드 할 링크 목록을 생성 할 수는 있지만 프로그램 내 시스템 인증에 문제가 있습니다. 나는 이것과 함께 401 오류가 계속 나타납니다 :

Public Shared Sub DownloadFiles(_tool As Tool) 
    Dim links As List(Of String) = GetJiraLinks(_tool) 

    Dim downloader As New WebClient 

    ' Initialize the client 
    Dim reqParm As New Specialized.NameValueCollection 

    reqParm.Add("os_username", "user") 
    reqParm.Add("os_password", "pass") 
    reqParm.Add("os_destination", "/secure/") 

    downloader.Credentials = New NetworkCredential("user", "pass") 

    Dim uploadLocation As String = My.Settings.jiraLocation & "login.jsp" 

    'downloader.Headers.Add("Content-Type", "application/x-www-form-urlencoded") 

    Dim responseBytes = downloader.UploadValues(uploadLocation, "POST", reqParm) 

    Dim responseBody = (New Text.UTF8Encoding).GetString(responseBytes) 

    Dim workingDir As String = CreateWorkingDir() 

    For Each link As String In links 
     Dim tempUri As New Uri(link) 

     Dim localpath As String = workingDir & "\" & System.IO.Path.GetFileName(tempUri.LocalPath) 

     downloader.DownloadFile(tempUri, localpath) 
    Next 
End Sub 
+1

무슨 일이 일어나는지 [Fiddler] (http://www.fiddler2.com)를 사용 했습니까? –

+0

감사합니다. 이것을 사용하여 어떻게 든 쿠키가 연관되어 있음을 알 수있었습니다. 내 생각 엔 WebClient가이 쿠키를 저장하지 않는다는 것입니다. http://stackoverflow.com/questions/2825377/how-can-i-get-the-webclient-to-use-cookies를 찾았지만 사용 방법은 나와 있지 않습니다. – Origin

답변

1

나는 솔루션의 작동 예제를 게시 할 것이라고 생각했습니다. 다른 많은 게시물은 쿠키 인식 웹 클라이언트 (How can I get the WebClient to use Cookies?)로 연결되지만 실제로 작동하지는 않습니다. 여기 내 것이 있습니다 :

Public Shared Sub DownloadFiles(_tool As Tool) 
    Dim links As List(Of String) = GetJiraLinks(_tool) 

    Dim downloader As New CookieAwareWebClient 

    ' Start by requesting the page. 

    Dim loginPage As String = My.Settings.jiraLocation & "login.jsp" 

    ' Initialize the client 
    Dim reqParm As New Specialized.NameValueCollection 

    reqParm.Add("os_username", "user") 
    reqParm.Add("os_password", "pass") 
    reqParm.Add("os_destination", "/secure/") 

    Dim responseBytes = downloader.UploadValues(loginPage, "POST", reqParm) 

    Dim responseBody = (New Text.UTF8Encoding).GetString(responseBytes) 

    Dim workingDir As String = CreateWorkingDir() 

    For Each link As String In links 
     Dim tempUri As New Uri(link) 

     Dim localpath As String = workingDir & "\" & System.IO.Path.GetFileName(tempUri.LocalPath) 

     downloader.DownloadFile(tempUri, localpath) 
    Next 
End Sub