Содержание статьи
Invoke-WebRequest
и Invoke-RestMethod
.Командлет Invoke-WebRequest
С помощью командлета Invoke-WebRequest
можно направить веб‑серверу HTTP-запрос и получить от него ответ.
Анализ HTML-страниц
Этот командлет хорошо подходит для анализа HTML-страниц. Еще он умеет сохранять страницы на локальном диске. В этом он похож на консольную утилиту wget и даже имеет такой псевдоним:
PSC:\Script>Get-Aliaswget
CommandTypeName
---------------
Aliaswget->Invoke-WebRequest
Обратимся с помощью Invoke-WebRequest
к какой‑нибудь простой странице, например Example Domain.
По умолчанию Invoke-WebRequest
выполняет HTTP-запрос с методом GET к ресурсу на веб‑сервере, адрес ресурса указывается в качестве значения параметра -Uri
. В результате возвращается объект типа HtmlWebResponseObject
, в котором хранится информация об ответе сервера:
PSC:\Script>$web=Invoke-WebRequest-Urihttps://example.com/index.html
PSC:\Script>$web|Get-Member
TypeName:Microsoft.PowerShell.Commands.HtmlWebResponseObject
...
PSC:\Script>$web
StatusCode:200
StatusDescription:OK
Content:<!doctypehtml>
<html>
<head>
<title>ExampleDomain</title>
<metacharset="utf-8"/>
<metahttp-equiv="Content-type"content="text/html; char
set=utf-8"/>
<metaname="viewport"conten...
RawContent:HTTP/1.1200OK
Age:497890
Vary:Accept-Encoding
X-Cache:HIT
Content-Length:1256
Cache-Control:max-age=604800
Content-Type:text/html;charset=UTF-8
Date:Mon,12Jul202116:05:14GMT
Exp...
Forms:{}
Headers:{[Age,497890],[Vary,Accept-Encoding],[X-Cache,HIT],[Co
ntent-Length,1256]...}
Images:{}
InputFields:{}
Links:{@{innerHTML=Moreinformation...;innerText=Moreinformation
...;outerHTML=<Ahref="https://www.iana.org/domains/example
">Moreinformation...</A>;outerText=Moreinformation...;ta
gName=A;href=https://www.iana.org/domains/example}}
ParsedHtml:mshtml.HTMLDocumentClass
RawContentLength:1256
В поле StatusCode
содержится код ответа от сервера (200
для нашего примера), в поле StatusDescription
— текстовое описание этого ответа (OK
).
Содержимое ответа от сервера и HTTP-заголовки
Содержимое ответа от сервера хранится в виде строки в поле Content
. В нашем случае здесь будет записан HTML-код:
PSC:\Script>$web.Content
<!doctypehtml>
<html>
<head>
<title>ExampleDomain</title>
<metacharset="utf-8"/>
<metahttp-equiv="Content-type"content="text/html; charset=utf-8"/>
<metaname="viewport"content="width=device-width, initial-scale=1"/>
<styletype="text/css">
body{
background-color:#f0f0f2;
margin:0;
padding:0;
font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI","Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
}
div{
width:600px;
margin:5emauto;
padding:2em;
background-color:#fdfdff;
border-radius:0.5em;
box-shadow:2px3px7px2pxrgba(0,0,0,0.02);
}
a:link,a:visited{
color:#38488f;
text-decoration:none;
}
@media(max-width:700px){
div{
margin:0auto;
width:auto;
}
}
</style>
</head>
<body>
<div>
<h1>ExampleDomain</h1>
<p>Thisdomainisforuseinillustrativeexamplesindocuments.Youmayusethis
domaininliteraturewithoutpriorcoordinationoraskingforpermission.</p>
<p><ahref="https://www.iana.org/domains/example">Moreinformation...</a></p>
</div>
</body>
</html>
В поле RawContent
записывается полный ответ от сервера с HTTP-заголовками в начале:
PSC:\Script>$web.RawContent
HTTP/1.1200OK
Age:497890
Vary:Accept-Encoding
X-Cache:HIT
Content-Length:1256
Cache-Control:max-age=604800
Content-Type:text/html;charset=UTF-8
Date:Mon,12Jul202116:05:14GMT
Expires:Mon,19Jul202116:05:14GMT
ETag:"3147526947+ident"
Last-Modified:Thu,17Oct201907:18:26GMT
Server:ECS(dcb/7F83)
<!doctypehtml>
<html>
<head>
<title>ExampleDomain</title>
...
Заголовки ответа тоже хранятся отдельно — в виде хеш‑таблицы в свойстве headers
:
PSC:\Script>$web.headers
KeyValue
--------
Age497890
VaryAccept-Encoding
X-CacheHIT
Content-Length1256
Cache-Controlmax-age=604800
Content-Typetext/html;charset=UTF-8
DateMon,12Jul202116:05:14GMT
ExpiresMon,19Jul202116:05:14GMT
ETag"3147526947+ident"
Last-ModifiedThu,17Oct201907:18:26GMT
ServerECS(dcb/7F83)
Скачать:
Скриншоты:
Важно:
Все статьи и материал на сайте размещаются из свободных источников. Приносим свои глубочайшие извинения, если Ваша статья или материал была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.