首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替代API网关的Powershell 2.0 Web请求

替代API网关的Powershell 2.0 Web请求
EN

Stack Overflow用户
提问于 2018-07-13 19:19:41
回答 0查看 622关注 0票数 0

我想使用API-Gateway从amazon aws获取信息。我已经创建了一个生成信息的Lambda函数,并将该函数转换为API网关。

我想调用invoke-webrequest来获取信息。web请求将包含以下信息,以便传递以从api网关获取信息: AWSURL、APIKEY、Data

我已经在Powershell3.0中创建并测试了invoke-webrequest,下面是代码

代码语言:javascript
复制
Invoke-WebRequest -Headers @{"X-Api-Key" = "<key>"} -Method PUT
              -Body "<data>" -Uri <awsURL>
              | Select-Object -Expand Content

这是真正的问题所在。

我的大多数机器都在Windows POS 2009上,我已经创建了在powershell 2.0中工作的脚本,并在我的windows 10机器上进行了测试,运行良好

代码语言:javascript
复制
  function ConvertFrom-Json20([object] $item){
    add-type -assembly system.web.extensions
    $ps_js=new-object system.web.script.serialization.javascriptSerializer

    #The comma operator is the array construction operator in PowerShell
    return ,$ps_js.DeserializeObject($item)
}

$awsUrl = "<awsURL>"

$urlHeader = [System.Net.WebRequest]::Create($awsURL)
$urlHeader.Headers.Add("X-Api-Key","<APIKEY>")
$urlHeader.Method = "PUT"

$data = "<DATA>"

$requestStream = $urlHeader.GetRequestStream()
$streamWriter = New-Object System.IO.StreamWriter($requestStream)
$streamWriter.Write($data)

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

$res = $urlHeader.GetResponse()

$streamReader = New-Object System.IO.StreamReader $res.GetResponseStream()
$result = $streamReader.ReadToEnd()

$resultFromJson = ConvertFrom-Json20 $result
Write-Host $resultFromJson

然而,当我在windows XP pos2009上运行这个脚本时,它不工作。Windows XP POS 2009使用的是powershell 2.0。我在下面得到一个getResponse()错误检查

代码语言:javascript
复制
    Exception calling "GetResponse" with "0" argument(s): "The underlying connection was closed: An unexpected error occurred on a send."
At line:24 char:30
+ $res = $urlHeader.GetResponse <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

You cannot call a method on a null-valued expression.
At line:26 char:73
+ $streamReader = New-Object System.IO.StreamReader $res.GetResponseStream <<<< ()
    + CategoryInfo          : InvalidOperation: (GetResponseStream:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At line:27 char:34
+ $result = $streamReader.ReadToEnd <<<< ()
    + CategoryInfo          : InvalidOperation: (ReadToEnd:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

我认为这可能与windows XP POS 2.0服务不喜欢响应或其他原因有关,作为替代方案,我可以使用cURL,但我真的希望使用windows powershell2.0脚本来实现这一点。

谁能提供他们的知识和经验在这方面,因为我已经尝试了这么久。谢谢。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51323946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档