curl
在PowerShell中是否有等效功能?它是否具有一些类似的内置功能,或者是否有第三方方cmdlet?
curl
在PowerShell中是否有等效功能?它是否具有一些类似的内置功能,或者是否有第三方方cmdlet?
Answers:
PowerShell 3.0具有新命令Invoke-RestMethod
:
http://technet.microsoft.com/zh-CN/library/hh849971.aspx
更多详情:
https://discoposse.com/2012/06/30/powershell-invoke-restmethod-putting-the-curl-in-your-shell/
curl
或wget
。
从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
尽管显然拒绝RFC中的“从Windows PowerShell中删除curl和wget别名”运动,但Curl不再是Invoke-WebRequest的别名(在Powershell 6.2.3上进行了测试)。
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 Code中打开保存的文件并在状态栏中观察“ 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中提供了可在其中找到的Powershell命令的语法说明。您会很好地阅读/略读一下,因为某些版本的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"
您也可以安装Windows版Git,然后将Git bin文件夹放入路径中。Git安装包括curl.exe等。安装后,只需%programfiles(x86)%\git\bin
输入您的PATH。然后,您将能够从Windows命令提示符或PowerShell控制台使用curl命令。
您可以使用Chocolatey安装cURL并在PowerShell CLI或中提供curl cmd
。
该命令应该起作用:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
自PowerShell 3.0以来,它是Microsoft.PowerShell.Utility的一部分。