使用powershell的http请求

时间:2011-10-10 16:15:10

标签: powershell powershell-v2.0

我希望用powershell向网页发出http请求,这是否可能,如果是这样,我怎么能实现这个目标呢?

我可以向https网页发出请求吗?我能够使用bat文件而不是https来发出http请求,希望我能用PowerShell来https页面请求。

8 个答案:

答案 0 :(得分:15)

您可以使用.NET框架提供的常用WebRequestHttpWebRequest类。

$request = [System.Net.WebRequest]::Create('http://example.com')
# do something with $request

与使用C#中的相同类和API没有什么不同,除了与PowerShell的语法差异。

PowerShell v3还会带来Invoke-WebRequest和其他几个。

答案 1 :(得分:15)

试试这个:

(New-Object System.Net.WebClient).DownloadString("http://stackoverflow.com")

WebClient.DownloadString Method (String)

或在PowerShell 3.0中,

(Invoke-WebRequest http://stackoverflow.com).content

Invoke-WebRequest

答案 2 :(得分:8)

根据您的工作情况,您还可以使用System.Net.WebClient,这是HttpWebRequest的简化抽象

$client = new-object system.net.webclient

在此处查看差异:What difference is there between WebClient and HTTPWebRequest classes in .NET?

PS:使用Powershell v3.0,您可以使用Invoke-WebRequestInvoke-RestMethod cmdlet来实现类似用途

答案 3 :(得分:2)

如果所有其他方法都失败,请使用http://curl.haxx.se中的Curl。您可以设置所有内容,包括证书处理,POST等。不是很微妙,但它可以工作并处理所有奇怪的情况;例如您可以设置--insecure标志以忽略证书名称问题,到期或测试状态。

答案 4 :(得分:2)

您可以使用Invoke-WebRequest cmdlet创建HTTP,HTTPS,FTP和FILE请求。这非常简单,并提供了许多选项。 示例:向 google.com

发出简单的http / https请求
Invoke-WebRequest -Uri "http://google.com"

可以找到更多参考资料MSDN

答案 5 :(得分:0)

此代码可通过Powershell中的https使用ASCII和二进制文件:

# Add the necessary .NET assembly
Add-Type -AssemblyName System.Net.Http

# Create the HttpClient object
$client = New-Object -TypeName System.Net.Http.Httpclient

# Get the web content.
$task = $client.GetByteArrayAsync("https://stackoverflow.com/questions/7715695/http-requests-with-powershell")

# Wait for the async call to finish
$task.wait();

# Write to file
[io.file]::WriteAllBytes('test.html',$task.result)

在Powershell 5.1.17134.1,Win 10上进行了测试

答案 6 :(得分:0)

试试这个 PowerShell 模块:https://github.com/toolkitx/simple-request

Install-Module -Name SimpleRequest安装 然后你可以发送像

这样的请求
$Data = @{
    "TokenUrl"     = 111
    "ClientSecret" = "222"
    "ClientId"     = "333"
    "AuthResource" = "444"
    "Username"     = "User1"
    "Password"     = "Password"
    "Id"           = 99
    "Price"        = 0.99
    "Value"        = "Content"
}

$Sample = '
POST https://httpbin.org/post?id={{Id}}

Content-Type: application/json
Authorization: Bearer {{QIBToken}}

{
    "id": {{Id}},
    "value": "{{Value}}"
}'

$Response = Invoke-SimpleRequest -Syntax $Sample -Context $Data

详细介绍请参考GitHub

答案 7 :(得分:0)

此方法下载内容:

# PowerShell 2 version
$WebRequest=New-Object System.Net.WebClient
$WebRequest.UseDefaultCredentials=$true
#$WebRequest.Credentials=(Get-Credential)
$Data=$WebRequest.DownloadData("http://<url>")
[System.IO.File]::WriteAllBytes("<full path of file>",$Data)

# PowerShell 5 version
Invoke-WebRequest -Uri "http://<url>" -OutFile "<full path of file>" -UseDefaultCredentials -ContentType