Как использовать HttpWebRequest для загрузки файла - PullRequest
6 голосов
/ 21 июля 2011

Попытка загрузить файл в коде.

Текущий код:

  Dim uri As New UriBuilder
    uri.UserName = "xxx"
    uri.Password = "xxx"
    uri.Host = "xxx"
    uri.Path = "xxx.aspx?q=65"

   Dim request As HttpWebRequest = DirectCast(WebRequest.Create(uri.Uri), HttpWebRequest)

    request.AllowAutoRedirect = True

    request = DirectCast(WebRequest.Create(DownloadUrlIn), HttpWebRequest)
    request.Timeout = 10000
    'request.AllowWriteStreamBuffering = True

    Dim response As HttpWebResponse = Nothing
    response = DirectCast(request.GetResponse(), HttpWebResponse)
    Dim s As Stream = response.GetResponseStream()

    'Write to disk
    Dim fs As New FileStream("c:\xxx.pdf", FileMode.Create)

    Dim read As Byte() = New Byte(255) {}
    Dim count As Integer = s.Read(read, 0, read.Length)
    While count > 0
        fs.Write(read, 0, count)
        count = s.Read(read, 0, read.Length)
    End While

    'Close everything
    fs.Close()
    s.Close()
    response.Close()

Запуск этого кода и проверка ответа. ResponseUri указывает, что я перенаправлен обратно на страницу входа, а не в файл PDF.

По какой-то причине это не разрешающий доступ, что я мог пропустить, так как я отправляю имя пользователя и пароль в URI?Спасибо за вашу помощь

Ответы [ 3 ]

4 голосов
/ 21 июля 2011

Вам не нужен весь этот код для загрузки файла из сети просто используйте класс WebClient и его метод DownloadFile

0 голосов
/ 14 февраля 2017

С UWP это стало более актуальным вопросом, поскольку у UWP нет WebClient. Правильный ответ на этот вопрос: если вы перенаправлены на страницу входа в систему, то должна быть проблема с вашими учетными данными ИЛИ заголовком настройки (или отсутствием) для HttpWebRequest.

Согласно Microsoft , запрос на загрузку отправляется с вызовом GetResponse() на HttpWebRequest, поэтому загруженный файл ДОЛЖЕН быть в потоке в ответе (возвращаемом GetResponse() звоните выше).

0 голосов
/ 09 февраля 2013

Вы должны проверить и посмотреть, требуются ли сайту файлы cookie (большинство так и делают), я бы использовал анализатор пакетов и запустил бы ваш код и точно увидел, что возвращает сервер. используйте fiddler или http анализатор для регистрации пакетов

...