Showing posts with label rest. Show all posts
Showing posts with label rest. Show all posts

Friday, 17 June 2022

HTTP-запросы и парсинг web-страниц в PowerShell.

Всем привет.

Эта статья - гла­ва из кни­ги Андрея Попова «Сов­ремен­ный PowerShell», вышед­шей в изда­тель­стве «BHV» в мар­те это­го года. В кни­ге под­робно опи­сан язык PowerShell и работа с обо­лоч­кой Windows PowerShell в Windows Terminal, вза­имо­дей­ствие с фай­ловой сис­темой, струк­туриро­ван­ными дан­ными и веб-ресур­сами. 

Собственно я больше знаком с первой книгой автора "Введение в PowerShell" которую он издал еще в 2009-м. С нее и началось мое вхождение в мир PowerShell. Поэтому книга «Сов­ремен­ный PowerShell» мне будет не так интересна как первая, которую она повторяет на 80%. Но надо отдать должное автору, что его подача материала всегда отличается ясностью, практичностью и лаконичностью.

Поэтому сегодня мы вместе с Андреем напишем HTTP-запросы и пропарсим web-страницы через PowerShell.

В интернете есть множество сервисов, с которы­ми мож­но работать, обра­щаясь к их ресур­сам по про­токо­лу HTTP. Веб-раз­работ­чики пос­тоян­но работа­ют с такими HTTP-зап­росами для дос­тупа к фун­кци­ям внеш­них API или для тес­тирова­ния собс­твен­ных при­ложе­ний. PowerShell для обра­щения к вебу по HTTP пред­лага­ет два стан­дар­тных коман­дле­та: Invoke-WebRequest и Invoke-RestMethod.

КОМАНДЛЕТ INVOKE-WEBREQUEST

С помощью командлета Invoke-WebRequest можно направить веб-серверу HTTP-запрос и получить от него ответ.

Анализ HTML-страниц

Этот командлет хорошо подходит для анализа HTML-страниц. Еще он умеет сохранять страницы на локаль­ном дис­ке. В этом он похож на кон­соль­ную ути­литу wget и даже име­ет такой псев­доним:

PS C:\Script> Get-Alias wget

CommandType     Name

-----------     ----

Alias           wget -> Invoke-WebRequest

Об­ратим­ся с помощью Invoke-WebRequest к какой-нибудь прос­той стра­нице, нап­ример Example Domain. По умол­чанию Invoke-WebRequest выпол­няет HTTP-зап­рос с методом GET к ресур­су на веб-сер­вере, адрес ресур­са ука­зыва­ется в качес­тве зна­чения парамет­ра -Uri. В резуль­тате воз­вра­щает­ся объ­ект типа HtmlWebResponseObject, в котором хранит­ся информа­ция об отве­те сер­вера:

Saturday, 13 November 2021

REST API и PowerShell.

Всем привет.

Теперь, когда вы знаете, как работать с данными JSON, давайте сделаем нечто более интересное: мы воспользуемся PowerShell для запроса REST API и анализа полученных результатов. Вы можете использовать практически любой REST API, но для некоторых требуется  аутентификация, поэтому будем использовать тот, который ее не требует. Используем сервис postcodes.io как вариант REST API, который позволяет вам запрашивать почтовые индексы стран по различным критериям.

Мы будем использовать URI api.postcodes.io/random/postcodes. Когда вы обращаетесь к этому URI, он запрашивает службу API postcodes.io и возвращает случайный почтовый индекс в форме JSON. Чтобы запросить этот URI, мы будем использовать PowerShell-командлет Invoke-WebRequest:

PS> $result = Invoke-WebRequest -Uri 'http://api.postcodes.io/random/postcodes'

PS> $result.Content


{"status":200,"result":{"postcode":"IP12

2FE","quality":1,"eastings":641878,"northings":250383,"country

:"England","nhs_ha":"East of England","longitude":

1.53013518866685,"latitude":52.0988661618569,"european_elector

al_region":"Eastern","primary_care_trust":"Suffolk","region":"

East of England","lsoa":"Suffo

lk Coastal 007C","msoa":"Suffolk Coastal

007","incode":"2FE","outcode":"IP12","parliamentary_constituen

cy":"Suffolk Coastal","admin_district":"Suffolk Coa

stal","parish":"Orford","admin_county":"Suffolk","admin_ward":

"Orford & Eyke","ccg":"NHS Ipswich and East

Suffolk","nuts":"Suffolk","codes":{"admin_distri

ct":"E07000205","admin_county":"E10000029","admin_ward":"E0501

449","parish":"E04009440","parliamentary_constituency":"E14000

81","ccg":"E38000086","nuts"

:"UKH14"}}}

Friday, 12 November 2021

JSON и Powershell.


Всем привет. 

Если вы работали в ИТ-сфере в течение последних пяти лет, вы, вероятно, сталкивались с объектами JSON. JavaScript Object Notation (JSON), созданный в начале 2000-х годов, представляет собой машиночитаемый, но при этом понятный человеку язык иерархической организации наборов данных. Как следует из названия, такое представление данных активно использовалось в приложениях JavaScript, а следовательно, и в веб-разработке. Недавний всплеск числа онлайн-сервисов, пользующихся REST API (это технология, которую используют для передачи данных между клиентом и сервером), привел к параллельному всплеску использования JSON. Если вы что-то делаете в интернете, вам пригодится навык работы с файлами JSON, которыми можно легко управлять в PowerShell.

Если говорить более конкретно, то JSON позволяет описывать объекты, на подобие того как это делает xml, но намного проще. По сути JSON-объекты представляют собой хеш-таблицу, допускающую вложенность.

Следующий пример показывает JSON-представление объекта, описывающего человека. В объекте есть строковые поля имени и фамилии, объект, описывающий адрес, и массив, содержащий список телефонов.

{

   "firstName": "Иван",

   "lastName": "Иванов",

   "address": {

       "streetAddress": "Московское ш., 101, кв.101",

       "city": "Петербург",

       "postalCode": 101101

   },

   "phoneNumbers": [

       "812 123-1234",

       "916 123-4567"

   ]

}

Для работы с JSON-объектами в Powershell начиная с версии 3.0 предусмотрены специальные командлеты:

PS C:\> Get-Command '*json'

CommandType    Name                              ModuleName

-----------    ----                              ----------

Cmdlet         ConvertFrom-Json                  Microsoft.PowerShell.Utility

Cmdlet         ConvertTo-Json                    Microsoft.PowerShell.Utility

Версія на друк

Популярне