Эквивалент PowerShell для завивки
Есть ли эквивалент curl
в PowerShell? Есть ли в ней какие-то похожие встроенные возможности или есть команда сторонних разработчиков?
Есть ли эквивалент curl
в PowerShell? Есть ли в ней какие-то похожие встроенные возможности или есть команда сторонних разработчиков?
В PowerShell 3.0 появилась новая команда Invoke-RestMethod
:
http://technet.microsoft.com/en-us/library/hh849971.aspx
Подробнее: https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
Начиная с версии Powershell 5.0, если не раньше, curl
является псевдонимом для Invoke-WebRequest
.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias curl -> Invoke-WebRequest
Alias iwr -> Invoke-WebRequest
Alias wget -> Invoke-WebRequest
Чтобы использовать команду без сглаживания …
PS> Invoke-WebRequest -Uri https://localhost:443/
PS> Invoke-WebRequest -Uri https://www.google.com
Таким образом, верните несколько свойств запроса следующим образом …
PS> Invoke-WebRequest -Uri https://www.google.com
StatusCode : 200
StatusDescription : OK
Content : <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-AU"><head><meta content="text/html; charset=UTF-8"
http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/...
RawContent : HTTP/1.1 200 OK
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Vary: Accept-Encoding
… или только содержимое …
PS> Invoke-WebRequest -Uri https://www.google.com | Select-Object -ExpandProperty Content
<!doctype html><html itemscope="" itemtype="http://schem[etc ...]
Эквивалентные команды с псевдонимами …
PS> curl -Uri https://www.google.com
PS> curl -Uri https://www.google.com | Select-Object -ExpandProperty Content
Leveraging Powershell defaults и другими псевдонимами можно сократить команды до
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
… но я бы не рекомендовал это делать. Обновление:
Начиная с Powershell 6.x “Core” curl
больше не является псевдонимом для Invoke-WebRequest
(псевдоним wget
также удален) . Вместо этого используйте Invoke-WebRequest
напрямую.
PS> Get-Alias -Definition Invoke-WebRequest | Format-Table -AutoSize
CommandType Name Version Source
----------- ---- ------- ------
Alias iwr -> Invoke-WebRequest
Curl больше не является псевдонимом для Invoke-WebRequest (протестировано на Powershell 6.2.3), несмотря на явное отклонение движения в RFC “удалить псевдонимы curl и wget из Windows PowerShell” .
Этот RFC отмечает, что “псевдонимы wget/curl уже были удалены из ядра PowerShell, поэтому проблема [наличия этих псевдонимов] была ограничена Windows PowerShell”
В заключение команда Powershell также призывает пользователей “не полагаться на псевдонимы в сценариях”.
Как отметил @v6ak в комментариях, использование curl
и wget
в PowerShell (5.0 или ниже) может быть проблемой в: непреднамеренном обращении к реальным завитушкам или wget, если они установлены бок о бок; и, в любом случае, вызывает путаницу.
Рекомендуется обновить “ядро” Powershell (6.x или выше), чтобы воспользоваться преимуществами кодировки по умолчанию utf8NoBOM
при использовании Invoke-WebRequest
(и многих других команд вывода текста). Однако, даже при использовании более короткой, неявной команды …
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
| Select-Object -ExpandProperty Content `
| Out-File jquery.fancybox.min.js `
-Encoding utf8NoBOM
… кодировка с utf8NoBOM
будет выполнена (вы можете это проверить, например, открыв сохраненный файл в Visual Studio Code и наблюдая “UTF-8” в строке состояния).
Файлы, сохраненные с utf8NoBOM
, имеют тенденцию вызывать меньше проблем при путешествии по различным экосистемам. Конечно, если вам нужна другая кодировка, вы можете явно задать какую-нибудь альтернативу.
В Powershell 5.0 и ниже кодировка utf8NoBOM
недоступна, не говоря уже о кодировке по умолчанию.
Подробности:
В отличном блоге командной строки Kung Fu есть запись , где они сравнивают curl, wget и соответствующие команды PowerShell
В двух словах:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html","C:\hello-world.html")
Или, если ваша версия Powershell/.Net не принимает 2 параметра для DownloadString
:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
Вы также можете установить Git для Windows , а затем поместить папку Git bin в свой путь. В установку Git'а входит, среди прочего, curl.exe. После установки просто поместите %programfiles(x86)%\git\bin
в PATH. Затем вы сможете использовать команду curl из командной строки Windows Command Prompt или консоли PowerShell.
Вы можете установить cURL с Chocolatey и иметь кёрлинг в PowerShell CLI или cmd
.
Эта команда должна работать:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Она является частью Microsoft.PowerShell.Utility начиная с PowerShell 3.0.
См. также: Получите $webclient.downloadstring для записи в текстовый файл в Powershell .