Хобрук: Ваш путь к мастерству в программировании

Ошибка WebClient при загрузке Zip-файлов 404 при перенаправлении

У меня есть 5 zip-файлов, которые я хочу загрузить с веб-сайта.

http://download.companieshouse.gov.uk/BasicCompanyData-2015-02-01-part1_5.zip http://download.companieshouse.gov.uk/BasicCompanyData-2015-02-01-part2_5.zip http://download.companieshouse.gov.uk/BasicCompanyData-2015-02-01-part3_5.zip http://download.companieshouse.gov.uk/BasicCompanyData-2015-02-01-part4_5.zip http://download.companieshouse.gov.uk/BasicCompanyData-2015-02-01-part5_5.zip

Однако, если я использую следующий код, я получаю ошибку 404, которая, я думаю, является результатом удаления http:// при переходе на страницу в браузере, но не при использовании моего кода.

    Try
        Dim reg As String = """.*zip"""
        Dim list As New List(Of String)()
        Dim list2 As New List(Of String)()
        Dim myRegex As New Regex(reg, RegexOptions.None)
        TextBox1.Text = New System.Net.WebClient().DownloadString("http://download.companieshouse.gov.uk/en_output.html").ToLower
        For Each myMatch As Match In myRegex.Matches(TextBox1.Text) 
            list.Add(myMatch.Value)
        Next
        Dim temp As String
        For Each i In list
            temp = i.Remove(0, 1)
            temp = temp.Remove(temp.Length - 1, 1)
            list2.Add(temp)
        Next
        Dim x As Integer = 1
        For Each i In list2
            Dim address As String = "http://download.companieshouse.gov.uk/" + i
            Dim des As String = Application.StartupPath + "\" + x.ToString + ".zip"
            Dim client As New System.Net.WebClient()
            client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
            client.DownloadFile(address, des)
            x = x + 1
        Next

        For i As Integer = 1 To x Step 1
            Shell(Application.StartupPath + "\7za.exe e " + Application.StartupPath + "\" + x + ".zip")
        Next
        list.Clear()
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try

Любые идеи?

* Обновление: я включил полный код вместо фрагмента.


  • Не могли бы вы опубликовать, как вы инициализируете переменную list2, пожалуйста. Когда я использую приведенный выше код, он отлично работает для меня, но я сделал предположение о list2 на основе вашего комментария в коде. 25.02.2015

Ответы:


1

Вероятно, это то, что или как у вас хранятся данные имени файла. В вашем коде есть одна или две другие проблемы:

Private filList As New List(Of String) From {"BasicCompanyData-2015-02-01-part1_5.zip",
                                         "BasicCompanyData-2015-02-01-part2_5.zip",
                                         "BasicCompanyData-2015-02-01-part3_5.zip",
                                         "BasicCompanyData-2015-02-01-part4_5.zip",
                                         "BasicCompanyData-2015-02-01-part5_5.zip"}

Затем в другом месте, например, нажатие кнопки:

Dim destPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim destFile As String
Dim baseURL As String = "http://download.companieshouse.gov.uk/"
Dim thisURL As String

Using wc As New WebClient
    wc.Headers.Add("user-agent", 
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")

    For Each f As String In filList
        thisURL = baseURL & f
        destFile = Path.Combine(destPath, f)
        wc.DownloadFile(thisURL, destFile)
    Next

End Using
  1. Блок USING гарантирует, что WebClient будет закрыт, утилизирован и ресурсы освобождены.
  2. В VS использование Application.StartupPath будет работать, но в качестве развернутого приложения может произойти сбой, когда приложение будет установлено в Program Files..., потому что ваше приложение, скорее всего, не сможет туда писать. Используйте Environment.GetFolderPath для получения таких папок, как MyDocuments.
  3. Эта версия сохраняет исходное имя файла, так что если вы делаете другие файлы, они не перезаписывают друг друга (еще одна возможная проблема при использовании приложения StartupPath).
25.02.2015

2

Проблема заключалась в том, как я нашел ссылки на странице, я читал веб-страницу в текстовое поле и применял к ней .toLower, поэтому URL-адрес был неправильным, когда я его извлек.

Проблемная строка:

TextBox1.Text = New System.Net.WebClient().DownloadString("http://download.companieshouse.gov.uk/en_output.html").ToLower
26.02.2015
Новые материалы

Я собираюсь научить вас Python шаг за шагом
Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

React on Rails
Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

Что такое гибкие методологии разработки программного обеспечения
Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

Ториго  — революция в игре Го
Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

Математика и интуиция - Часть 1
У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..