Автоматизация запросов по почтовому индексу с использованием HtmlAgilityPack
Table Of Content
Привет, ребята! Как дела?
В этой статье я покажу вам, как автоматизировать запросы по почтовым индексам на сайте почты Бразилии с помощью библиотеки HtmlAgilityPack для .NET Core.
Поехали!
Примечание: чтобы не делать статью слишком длинной, я не буду объяснять пошагово, как создать консольное приложение в .NET Core.
После создания консольного приложения, установите библиотеку HtmlAgilityPack с помощью NuGet.
Вы можете установить ее с помощью NuGet внутри Visual Studio:
Теперь, когда у нас уже установлен пакет, добавим следующий код:
Краткое объяснение этого фрагмента кода:
Сначала мы просим пользователя ввести почтовый индекс, чтобы наше приложение могло найти соответствующий адрес. Затем мы передаем введенный почтовый индекс в наш метод "BuscaEnderecoPeloCEP(cep)".
В этой части нашего метода мы создаем три переменные типа "string": "httpResponse, html и UrlCorreio".
Примечание: Переменная "httpResponse" будет содержать HTML, возвращенный после отправки POST-запроса на адрес почты Бразилии (хранящийся в переменной "UrlCorreio").
Затем мы начинаем блок "Try-catch". Внутри него мы создаем переменную типа "Dictionary<string, string>
" (здесь можно использовать любую коллекцию типа "Ключ-Значение").
Мы отправим эту коллекцию как "FormUrlEncodedContent" внутри нашего "HttpRequestMessage". Чтобы сделать запрос на адрес почты Бразилии, мы создаем блок "using", в котором создаем объект типа "HttpClient". Этот объект будет отвечать за выполнение HTTP-запроса.
Здесь мы создаем объект типа "HtmlDocument" (класс из HtmlAgilityPack). Чтобы извлечь всю информацию из возвращенного HTML, мы передаем HTML в метод "LoadHtml()".
Переменная "name" имеет тип "HtmlNodeCollection" и будет содержать всю информацию из тега "td" HTML.
Переменные "bairro, cidade и rua" будут содержать информацию из соответствующих позиций этой коллекции ("name[1], name[2], name[0]" соответственно).
Наконец, переменная "endereco" будет содержать объединение информации из "bairro, cidade и rua", и мы вернем эту информацию.
Если произойдет какое-либо исключение, мы вернем сообщение об ошибке. (этот тип обработки можно значительно улучшить, но это не является основной темой здесь).
В качестве учебного материала и для абстрагирования этих функций, в марте 2020 года я создал библиотеку .NET Standard 2.0, чтобы выполнять эти запросы. Кроме того, можно искать почтовые индексы по адресу. Если вы хотите проверить, я оставлю здесь ссылки:
- NuGet: DotNetCepSearch
- Github: DotNetCepSearch