Invoke-WebRequest,POST失败,出现(400)错误请求

时间:2017-01-21 02:44:23

标签: powershell powershell-v3.0 webrequest powershell-v4.0 http-status-code-400

大家好,

当我运行以下Statement时,它会在生产环境中抛出400 Bad Request错误,但在我的本地环境中运行正常。 $ uri(url)在两种情况下都不同,但执行相同的任务。

Invoke-WebRequest -UseBasicParsing  -Header $headers -ContentType 'Application/xml' -METHOD POST -BODY $postParams -Uri $uri

它返回400 Bad Request

Invoke-WebRequest : The remote server returned an error: (400) Bad Request.
At C:\script.ps1:107 char:14
+ ... resultRun = Invoke-WebRequest -Header $headers -ContentType 'Applicat   ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

我尝试捕获异常,使用以下内容:

try {
Invoke-WebRequest -UseBasicParsing  -Header $headers -ContentType 'Application/xml' -METHOD POST -BODY $postParams -Uri $uri
}
catch {
     echo '### Inside catch ###'
   $ErrorMessage = $_.Exception.Message
   echo '## ErrorMessage ##' $ErrorMessage
  $FailedItem = $_.Exception.ItemName
  echo '## FailedItem ##' $FailedItem 
  $result = $_.Exception.Response.GetResponseStream()
     echo '## result2 ##' $result
    $reader = New-Object System.IO.StreamReader($result)
     echo '## reader ##' $reader 
    $responseBody = $reader.ReadToEnd();
     echo '## responseBody ##' $responseBody
}

返回以下结果

### Inside catch ###
ErrorMessage:
The remote server returned an error: (400) Bad Request.
FailedItem :
result2:

CanTimeout   : True
ReadTimeout  : -1
WriteTimeout : -1
CanRead      : True
CanSeek      : True
CanWrite     : True
Capacity     : 286
Length       : 286
Position     : 0

reader :

CurrentEncoding : System.Text.UTF8Encoding
BaseStream      : System.Net.SyncMemoryStream
EndOfStream     : False

responseBody:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Response><ResponseStatus><Status>FAILURE</Status><Messages><Message><Code>400</Code><Type>INVALID DATA</Type><Text>Please see the log for more details</Text></Message></Messages></ResponseStatus></Response>

以上异常结果未提供相关信息。

同一个Invoke-WebRequest调用在一台服务器上工作正常但在另一台服务器上出现故障时失败。

各个服务器上出现此错误的原因可能是什么?

在我看来,代码很好但在与生产服务器建立连接时出了问题。但是不确定我们需要遵循哪些故障排除步骤?

提前致谢。

0 个答案:

没有答案