Есть ли эквивалент 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/
curl
или wget
в Powershell сейчас.
Начиная с 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
Используя значения по умолчанию Powershell и другие псевдонимы, вы можете сократить команды до
PS> curl https://www.google.com
ps> curl https://www.google.com | Select -ExpandProperty Content
... но я бы не рекомендовал это. Подробные команды помогают другим при чтении вашего кода.
Обновить:
Начиная с Powershell 6.x «Ядро» 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 Core, поэтому проблема с наличием этих псевдонимов была ограничена Windows PowerShell».
В заключение команда Powershell также призывает пользователей «не полагаться на псевдонимы в сценариях».
Как отметил @ v6ak в комментариях, использование curl
и wget
в PowerShell (5.0 или ниже) может вызвать проблемы в: непреднамеренном вызове реального curl или 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
Однако даже при использовании более короткой неявной команды ...
Invoke-WebRequest `
-Uri https://raw.githubusercontent.com/fancyapps/fancybox/master/dist/jquery.fancybox.min.js `
-OutFile jquery.fancybox.min.js
... utf8NoBOM
будет выполнено кодирование с помощью (вы можете проверить это, например, открыв сохраненный файл в коде Visual Studio и наблюдая «UTF-8» в строке состояния).
Сохраненные файлы, utf8NoBOM
как правило, вызывают меньше проблем при путешествии по различным экосистемам. Конечно, если вам нужна какая-то другая кодировка, вы можете явно указать альтернативу.
В Powershell 5.0 и ниже utf8NoBOM
кодировка была недоступна, не говоря уже о настройке по умолчанию.
Подробности:
get-help curl
. Вы увидите Invoke-WebRequest [-Uri] <Uri> ...
, что скобки, []
указывающие, -Uri
могут быть опущены (и, следовательно, неявно вызваны). Как я упоминал в основном посте: в общем, вы должны быть явными (где вы или другие собираетесь читать ваш код в будущем).
[]
сделал
get-help
приведены в некоторых версиях en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form . Вы преуспеете, чтобы прочитать / просмотреть это, потому что некоторая версия расширенной формы Backus Naur, вероятно, используется для описания синтаксиса многих языков, с которыми вы столкнетесь. Вы заметите, что на en.wikipedia.org/wiki/… скобки [ ...]
обозначают необязательный синтаксис.
В отличном блоге о командной строке 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"
DownloadFile
функцию, которая также работает хорошо.
Вы также можете установить Git для Windows , а затем поместить папку Git bin в свой путь. Установка Git включает, помимо прочего, curl.exe. После установки просто %programfiles(x86)%\git\bin
введите ваш путь. После этого вы сможете использовать команду curl из командной строки Windows или консоли PowerShell.
Вы можете установить cURL с Chocolatey и иметь доступ к curl в PowerShell CLI или cmd
.
ближе всего к окнам wget
или curl
к ним есть биты (Background Intelligent Transfer Service), у которых есть некоторые фрагменты, готовые для powershell.
Эта команда должна работать:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Это часть Microsoft.PowerShell.Utility начиная с PowerShell 3.0.
Смотрите также: Получить $ webclient.downloadstring для записи в текстовый файл в Powershell .