jackhkyin 2023-02-23 12:02 采纳率: 71.4%
浏览 356
已结题

如何使用powershell发送post/get请求

最近在做一个开源产品(github地址:https://github.com/LizardByte/Sunshine) 的二次开发适配,我需要对指定页面发送特定的post或get请求。我想用windows自带的powershell来实现。

这个开源产品sunshine安装完成后通过https://ip:47990/ 登录(预设账户密码为:sunshine)

img

登录进去后有个发送pin码的页面(https://192.168.0.13:47990/pin) 我想实现的就是:通过powershell登录并在pin页面输入pin码(假设pin码为1234)并点击send按钮

img

我找到一段powershell代码用于发送post请求,可以实现登录。但我不知道如何增加发送pin码参数。powershell里有二个命令函数可用于发送post请求:Invoke-WebRequest 和 Invoke-RestMethod

$username = "sunshine"
$password = "sunshine"
$url = "https://192.168.0.13:47990/pin"

# 创建一个 WebRequest 对象
$req = [System.Net.WebRequest]::Create($url)

# 禁用 SSL 证书验证
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

# 设置 HTTP 请求头
$req.Headers["Authorization"] = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($username + ":" + $password)))"

# 发送 HTTP 请求
$res = $req.GetResponse()

# 输出响应的内容
$reader = New-Object System.IO.StreamReader($res.GetResponseStream())
$result = $reader.ReadToEnd()
$reader.Close()
$res.Close()
Write-Output $result

下面是pin页面的post请求消息头:

img

这是sunshine安装完成后生成的pin.html页面文件里的pin码验证方法,看样子是使用post请求方法

img

有熟悉精通powershell的帮忙看看该怎么写,sunshine很小,安装文件仅16MB 安装后也只有60MB多,也有硬盘版,只要电脑是独显都可以安装运行,懂串流的可以用moonlight测试。大家写的powershell代码可以在Windows PowerShell ISE 里面先自行测试下。谢谢~!!

  • 写回答

4条回答 默认 最新

  • 程序yang 优质创作者: 编程框架技术领域 2023-02-23 12:13
    关注

    仅供参考:
    要发送带有参数的 POST 请求,可以使用 Invoke-RestMethod。以下是一个示例代码,用于在 PowerShell 中发送包含 pin 参数的 POST 请求:

    $username = "sunshine"
    $password = "sunshine"
    $url = "https://192.168.0.13:47990/pin"
    $pin = "1234"
    
    $body = @{
        pin = $pin
    } | ConvertTo-Json
    
    $response = Invoke-RestMethod -Uri $url -Method Post -Headers @{
        Authorization = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($username + ":" + $password)))"
        ContentType = "application/json"
    } -Body $body
    
    Write-Output $response
    

    在这段代码中,我们首先定义了用户名、密码、URL 和 pin 码。然后,我们使用 ConvertTo-Json 将参数转换为 JSON 格式,并将其存储在 $body 变量中。

    接下来,我们使用 Invoke-RestMethod 函数来发送 POST 请求。我们使用 -Method 参数指定请求方法为 POST,使用 -Headers 参数设置请求头,包括授权信息和 Content-Type,以便服务器知道我们发送的是 JSON 格式的数据。最后,我们将 $body 变量作为请求体传递给 Invoke-RestMethod 函数。

    如果请求成功,服务器将返回一个响应对象,我们可以将其输出到控制台。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月24日
  • 修改了问题 2月23日
  • 修改了问题 2月23日
  • 创建了问题 2月23日