2011-10-10 11:19:21 +0000 2011-10-10 11:19:21 +0000
155
155

Эквивалент PowerShell для завивки

Есть ли эквивалент curl в PowerShell? Есть ли в ней какие-то похожие встроенные возможности или есть команда сторонних разработчиков?

Ответы (8)

104
104
104
2013-05-04 00:18:17 +0000

В 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/

46
46
46
2015-10-30 23:21:20 +0000

Начиная с версии 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

Использование псевдонимов не рекомендуется

Начиная с 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 недоступна, не говоря уже о кодировке по умолчанию.

Подробности:

29
29
29
2011-10-10 11:26:27 +0000

В отличном блоге командной строки 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"
15
15
15
2013-04-04 01:20:37 +0000

Вы также можете установить Git для Windows , а затем поместить папку Git bin в свой путь. В установку Git'а входит, среди прочего, curl.exe. После установки просто поместите %programfiles(x86)%\git\bin в PATH. Затем вы сможете использовать команду curl из командной строки Windows Command Prompt или консоли PowerShell.

14
14
14
2013-01-22 15:07:59 +0000

Вы можете установить cURL с Chocolatey и иметь кёрлинг в PowerShell CLI или cmd.

1
1
1
2019-06-04 03:10:31 +0000

curl

cmd, bash

curl -H "Host: whoami.local" 192.168.4.4

powershell

Invoke-WebRequest -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4

# or 
# $(Get-Command curl) return "curl -> Invoke-WebRequest"
curl -H @{"Host"="whoami.local"} -UseBasicParsing 192.168.4.4
1
1
1
2011-12-11 16:38:28 +0000

Ближайшая вещь к wget или curl в окнах - это bits (Background Intelligent Transfer Service), в которой есть несколько фрагментов, готовых к работе в powershell.

0
0
0
2018-02-13 12:01:17 +0000

Эта команда должна работать:

Invoke-WebRequest -UseBasicParsing -Uri http://example.com/

Она является частью Microsoft.PowerShell.Utility начиная с PowerShell 3.0.

См. также: Получите $webclient.downloadstring для записи в текстовый файл в Powershell .

Похожие вопросы

7
16
19
2
2