Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在powershell v2.0中执行简单的post请求,运气不佳_Powershell - Fatal编程技术网

尝试在powershell v2.0中执行简单的post请求,运气不佳

尝试在powershell v2.0中执行简单的post请求,运气不佳,powershell,Powershell,我只是尝试使用一些键和值执行HTTPPOST请求。我不能让它为我的生活工作,是的,我知道这应该是简单的 以下是我尝试过的: $Body = [byte[]][char[]]'username=asdf'; $Request = [System.Net.HttpWebRequest]::CreateHttp('http://mysite/test.php'); $Request.Method = 'POST'; $Stream = $Request.GetRequestStream(); $Str

我只是尝试使用一些键和值执行HTTPPOST请求。我不能让它为我的生活工作,是的,我知道这应该是简单的

以下是我尝试过的:

$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中不起作用,因为我收到了错误消息

方法 调用失败,因为[System.Net.HttpWebRequest]不包含 名为“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回荡$\u POST['username'时,“username”并没有被注意到

有人能帮我告诉我这里缺少什么吗?我已经在谷歌上搜索了几个小时,但由于某些原因,我尝试的一切都不起作用。在大于2.0但不大于2.0的Powershell版本上工作正常(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中工作。尝试在您的系统上安装dotnet 4.5,然后安装WMF 4.0,这应该可以正常工作

[System.Net.HttpWebRequest]
的dotnet类在dotnet 4.5之前没有静态方法
CreateHttp()


为什么不将这台计算机更新为更新版本的PowerShell?这将大大减少痛苦。

a>
CreateHttp
不是一种方法,它是
Create
;B> 您将内容类型设置为XML,但正文为纯文本。谢谢。我终于让它工作了!唉。再次感谢!嗨@LewlSauce,我很高兴你能成功。请为您的代码添加编辑,并为找到此帖子的其他人提供workign解决方案。完成。感谢@FoxDeploy,我为一些测试目的给了一些人一个脚本,我不能让每个人都安装更新。只是想找到一些适用于旧版本的东西。相信我,我希望我能!:)今天,安装WMF 4已经不可能了,因为下载不再可用