Использование 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

person Origin    schedule 21.05.2013    source источник
comment
Вы использовали Fiddler, чтобы посмотреть, что происходит?   -  person John Saunders    schedule 21.05.2013
comment
Спасибо за это. Используя это, я смог увидеть, что каким-то образом задействован файл cookie. Я предполагаю, что WebClient не сохраняет этот файл cookie. Я нашел stackoverflow.com/questions/2825377/, но не показывает, как его использовать.   -  person Origin    schedule 21.05.2013


Ответы (1)


Я решил опубликовать полностью рабочий пример решения. Многие другие сообщения ссылаются на веб-клиент с поддержкой файлов cookie (Как я могу заставить веб-клиент использовать файлы cookie?), но не показать его в действии. Вот мой:

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
person Origin    schedule 21.05.2013