WebCquest在TeamCity上失败,出现HTTP-400错误

时间:2013-11-22 14:37:20

标签: powershell teamcity webrequest

我有一个PowerShell脚本,它对API进行SOAP调用:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

$request = [System.Net.WebRequest]::Create("https://***.***.***.***/iControl/iControlPortal.cgi")
$request.Method = "POST"
$request.Credentials = new-object System.Net.NetworkCredential @("username", "password")
$request.Proxy = new-object System.Net.WebProxy @("***.***.***.***", ****)
$request.PreAuthenticate = $true;
$request.CachePolicy = new-object System.Net.Cache.RequestCachePolicy "NoCacheNoStore"

$payload = '<?xml version="1.0"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"><soap:Body><q1:get_monitor_status xmlns:q1="urn:iControl:LocalLB/PoolMember"><pool_names href="#id1" /></q1:get_monitor_status><soapenc:Array id="id1"><Item>{0}</Item></soapenc:Array></soap:Body></soap:Envelope>' -f "my-pool"
$requestPayloadWriter = new-object System.IO.StreamWriter $request.GetRequestStream()
$requestPayloadWriter.Write($payload)
$requestPayloadWriter.Flush()
$requestPayloadWriter.Close()

$responsePayloadReader = new-object System.IO.StreamReader $request.GetResponse().GetResponseStream()
$pool_status = $responsePayloadReader.ReadToEnd()
$responsePayloadReader.Flush()
$responsePayloadReader.Close()

$pool_status

这在我的机器上本地工作,但是当我通过TeamCity运行它时失败。
当我远程访问代理并从控制台手动运行脚本时,它确实有效。

我从PowerShell获得的消息是:

  

使用“0”参数调用“GetResponse”的异常:“遥控器   服务器返回错误:(400)错误请求。“

有关可能出现的问题或如何进一步诊断的任何建议?
我无法使用Fiddler捕获任何流量,因此对此也提出任何建议。

1 个答案:

答案 0 :(得分:0)

问题是,事实证明,我正在调用的F5 API。 我们正在使用的F5版本中存在一个错误:在某些情况下,请求会被400响应拒绝。

与TeamCity / Powershell无关。