Чи є еквівалент curlPowerShell? Чи є у неї подібні вбудовані можливості або є сторонній командлет?
Чи є еквівалент curlPowerShell? Чи є у неї подібні вбудовані можливості або є сторонній командлет?
Відповіді:
У 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 .