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/
从Powershell 5.0开始,如果不是之前的,curl
就是Invoke-WebRequest
的别名。
更新:
从 [ Powershell 6.x “Core” ]开始,(https://github.com/PowerShell/PowerShell) curl
不再是Invoke-WebRequest
的别名(别名wget
也被删除了)。
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
Curl不再是Invok-WebRequest的别名(在Powershell 6.2.3上测试过),尽管在RFC “从Windows PowerShell中删除别名curl和wget”中的一个动议显然被拒绝了。
RFC指出 “wget/curl别名已经从PowerShell Core中删除了,所以[拥有这些别名的问题只限于Windows PowerShell。”
在结论中,Powershell团队还鼓励用户 “不要在脚本中依赖别名"。
正如@v6ak在评论中指出的那样,在PowerShell(5.0或更低版本)中使用Invoke-WebRequest
和curl
可能会出现这样的问题:如果并排安装,无意中会调用真正的curl或wget;而且,无论如何,都会造成混乱。
建议你升级Powershell "core"(6.x或更高的版本),以便在使用wget
(和许多其他文本输出命令)时,利用默认的编码utf8NoBOM
。如果明确地这样做,你可以这样做:
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 ...]
………用Invoke-WebRequest
进行编码(你可以通过在Visual Studio Code中打开保存的文件,并在状态栏中观察到 "UTF-8 "来验证这一点)。当然,如果你需要一些其他的编码,你可以明确地设置一些替代编码。
在Powershell 5.0及以下版本中,utf8NoBOM
编码是不可用的,更不用说默认的了。 PowerShell.Utility, Out-File, 参数, -Encoding ](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-file?view=powershell-6#parameters)
- Powershell 6, 新内容, Powershell Core 6.x中的新内容, Powershell Core 6.0中的突破性变化, "更改$OutputEncoding为使用UTF-8 NoBOM编码而不是ASCII #5369”
优秀的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版本不接受DownloadString
的2个参数:
(New-Object System.Net.WebClient).DownloadString("http://www.example.com/hello-world.html") > "C:\hello-world.html"
你也可以安装 Git for Windows ,然后把Git bin文件夹放到你的路径中。Git安装中,包括了 curl.exe等。安装好后,把%programfiles(x86)%\git\bin
放到你的PATH里就可以了。然后你就可以在Windows命令提示符或PowerShell控制台中使用curl命令了。
这条命令应该可以使用:
Invoke-WebRequest -UseBasicParsing -Uri http://example.com/
自从PowerShell 3.0以来,它是Microsoft.PowerShell.Utility的一部分。Get $webclient.downloadstring to write to text file in Powershell ](https://stackoverflow.com/q/9365000/55075).