2010-02-18 4 views

답변

3

내가 비탈에 대해 아무것도 모르지만, HTTP의 POST를 실행하기 위해이 기능을 사용할 수 있습니다 : 당신은 어떤 데이터를 전달하면

function Execute-HttpPost 
{ 
    param(
    [string] $url = $null, 
    [string] $data = $null, 
    [System.Net.NetworkCredential]$credentials = $null, 
    [string] $contentType = "application/x-www-form-urlencoded", 
    [string] $codePageName = "UTF-8", 
    [string] $userAgent = $null 
); 

    if ($url -and $data) 
    { 
    [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url); 
    $webRequest.ServicePoint.Expect100Continue = $false; 
    if ($credentials) 
    { 
     $webRequest.Credentials = $credentials; 
     $webRequest.PreAuthenticate = $true; 
    } 
    $webRequest.ContentType = $contentType; 
    $webRequest.Method = "POST"; 
    if ($userAgent) 
    { 
     $webRequest.UserAgent = $userAgent; 
    } 

    $enc = [System.Text.Encoding]::GetEncoding($codePageName); 
    [byte[]]$bytes = $enc.GetBytes($data); 
    $webRequest.ContentLength = $bytes.Length; 
    [System.IO.Stream]$reqStream = $webRequest.GetRequestStream(); 
    $reqStream.Write($bytes, 0, $bytes.Length); 
    $reqStream.Flush(); 

    $resp = $webRequest.GetResponse(); 
    $rs = $resp.GetResponseStream(); 
    [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs; 
    $sr.ReadToEnd(); 
    } 
} 

이처럼 그들을를 urlencode : 그냥

add-type -AssemblyName System.Web 
[system.Web.Httputility]::UrlEncode($data) 

추측 - 어쩌면 이런 식으로 작동 할 수 있습니까?

$d = [system.Web.Httputility]::UrlEncode("<request><actions><action><body>some body</body></action></actions></request>") 
Execute-HttpPost -url 'http://www.vitalist.com/services/api/actions.xml' -data $d -credentials (Get-Credential) 
+0

stej. 도움을 주셔서 감사하지만 그것을 작동시킬 수 없습니다. 이 오류가 발생합니다 : "0"인수가있는 "GetResponse"예외 호출 : "원격 서버에서 오류를 반환했습니다 : (401) 권한이 없습니다." 하지만 나는 그것이 정확한 신임장을주고 있다고 알고있다. 기묘한. – GollyJer

관련 문제