Чи є еквівалент 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 "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 Core, тому проблема [мати ці псевдоніми] була обмежена Windows PowerShell."
На закінчення команда Powershell також закликає користувачів "не покладатися на псевдоніми у сценаріях".
Як зазначає @ v6ak в коментарях використання curl
та wget
в PowerShell (5.0 або нижче) може бути проблемою в: ненавмисному виклику справжнього завитка або wget, якщо встановлено поруч; і, в будь-якому випадку, викликає плутанину.
Рекомендується оновити "core" 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 . Ви будете добре читати / перебирати це, оскільки деяка версія Extended Backus Naur Form, ймовірно, використовується для опису синтаксису багатьох мов, які ви зустрінете. Ви помітите, що в дужках en.wikipedia.org/wiki/… дужки [ ...]
позначають синтаксис, який не є обов'язковим.
У відмінному блозі Command Line 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
свій PATH. Тоді ви зможете використовувати команду curl з командної лінії Windows або консолі PowerShell.
Ви можете встановити cURL за допомогою Chocolatey і мати завитки, доступні в PowerShell CLI або cmd
.
Найближче до Windows wget
або бітcurl
- це біти (Background Intelligent Transfer Service), у яких є кілька фрагментів, готових до передачі повноважень.
Ця команда повинна працювати:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
Це частина Microsoft.PowerShell.Utility з PowerShell 3.0.
Дивіться також: Отримайте $ webclient.downloadstring для запису до текстового файлу в Powershell .