powershell - 尝试在 powershell v2.0 中做一个简单的发布请求,没有运气

标签 powershell

我只是想用一些键和值做一个 HTTP POST 请求。我一辈子都无法让它发挥作用,是的,我知道这应该很简单。

这是我尝试过的:

$Body = [byte[]][char[]]'username=asdf';
$Request = [System.Net.HttpWebRequest]::CreateHttp('http://mysite/test.php');
$Request.Method = 'POST';
$Stream = $Request.GetRequestStream();
$Stream.Write($Body, 0, $Body.Length);
$Request.GetResponse();

这在 Powershell v2.0 中不起作用,因为我收到错误

Method invocation failed because [System.Net.HttpWebRequest] doesn't contain a method named 'CreateHttp'.

接下来,我举了别人的例子:

$URI1 = "http://mysite/test.php"

$request = [System.Net.WebRequest]::Create($URI1)
$request.ContentType = "application/xml"
$request.Method = "POST"
$body = "username=test"

# $request | Get-Member  for a list of methods and properties 

try
{
    $requestStream = $request.GetRequestStream()
    $streamWriter = New-Object System.IO.StreamWriter($requestStream)
    $streamWriter.Write($body)
}

finally
{
    if ($null -ne $streamWriter) { $streamWriter.Dispose() }
    if ($null -ne $requestStream) { $requestStream.Dispose() }
}

$res = $request.GetResponse()

但由于某些原因,当 test.php 回显 $_POST['username'] 时,“用户名”没有被注意到

有人可以帮我告诉我这里缺少什么吗?我已经用谷歌搜索了几个小时,但出于某种原因,我尝试的一切都不起作用。适用于高于 2.0 的 Powershell 版本,但不适用于 2.0(Windows 7 中的默认版本)。

Invoke-WebRequest 和 Invoke-RestMethod 不适用于 Powershell v2.0,因此我不得不寻找所有这些烦人的替代方案。

* 编辑 *

我在找到另一个 HTTP POST 请求示例后开始工作:

$url = "http://mysite/test.php"
$postData = "username=test"

$buffer = [text.encoding]::ascii.getbytes($postData)

[net.httpWebRequest] $req = [net.webRequest]::create($url)
$req.method = "POST"
$req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
$req.Headers.Add("Accept-Language: en-US")
$req.Headers.Add("Accept-Encoding: gzip,deflate")
$req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7")
$req.AllowAutoRedirect = $false
$req.ContentType = "application/x-www-form-urlencoded"
$req.ContentLength = $buffer.length
$req.TimeOut = 50000
$req.KeepAlive = $true
$req.Headers.Add("Keep-Alive: 300");
$reqst = $req.getRequestStream()
$reqst.write($buffer, 0, $buffer.length)
$reqst.flush()
$reqst.close()
[net.httpWebResponse] $res = $req.getResponse()
$resst = $res.getResponseStream()
$sr = new-object IO.StreamReader($resst)
$result = $sr.ReadToEnd()
$res.close()

这是在其他评论出现之前在另一个网站上发现的;但是,我已经尝试了下面人们建议的解决方案,并且也能够使它正常工作。

最佳答案

在第一个示例代码中,该方法应命名为Create,而不是CreateHttp

在第二个代码块中,您将内容类型设置为“application/xml”,但正文是纯文本。

关于powershell - 尝试在 powershell v2.0 中做一个简单的发布请求,没有运气,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34422255/

相关文章:

powershell - 第二次运行时,Copy-Item 复制目标内的文件夹

powershell - 运行空间坏了。 (远程处理、WinRM 和 Sharepoint)

powershell - powershell 中的 `cat somefile | cat` 给出 10000 行而不是 100 行

powershell - 在任务计划程序中传递Powershell参数

powershell - 使用现代终端(如 Windows 终端)运行 Julia

powershell - 将当前文件路径传递给 Powershell "SendTo"脚本

Powershell 如何用逗号将多行合并为一行

PowerShell - cmdlet 如何返回值?

git - 尝试使用 Powershell 从 Azure DevOps Git 存储库下载文件

显示默认值的 powershell 强制参数