2010-08-26 79 views

Respuesta

22

creé esta función Get-HTTP para realizar peticiones HTTP

param([string]$url) 

$req = [System.Net.WebRequest]::Create($url) 
$req.Method ="GET" 
$req.ContentLength = 0 

$resp = $req.GetResponse() 
$reader = new-object System.IO.StreamReader($resp.GetResponseStream()) 
$reader.ReadToEnd() 

Tratar con el resultado final como XML es muy fácil, sin embargo, si desea procesar JSON es probable que necesite alguna biblioteca .Net como JSON.Net.

42

Lo que quiere es PowerShell 3 y sus Invoke-RestMethod, ConvertTo-Json y ConvertFrom-Json cmdlets. Su código se termina pareciéndose a:

$stuff = Invoke-RestMethod -Uri $url -Method Get; 

y no hay ni siquiera debe ser una necesidad de invocar ConvertFrom-Json en el $stuff resultante => ya está en un formato no sea una cadena utilizable.

Ver http://technet.microsoft.com/en-us/Library/hh849971.aspx para más detalles.

+0

¿Esto funcionará con SharePoint 2010? – craig

+0

Es posible que también deba proporcionar credenciales. En este caso, usted haría un comando como $ stuff = Invoke-RestMethod -Uri $ url -Método Obtenga -Credential "dominio \ nombre de usuario". –

+0

¿Hay alguna manera de pasar las credenciales para Basic Auth? Lo que Jubblerbug dijo funciona para presentar una ventana emergente que solicita la contraseña, pero necesito automatizar esta –

5

Usamos Powershell para consultar una API REST que se ocupa solo de los datos de estilo Json. Al principio fue incómodo, pero el siguiente código es todo lo que necesitamos para realizar la mayoría de las operaciones:

# Authentication 
$webclient = New-Object System.Net.WebClient 
$creds = New-Object System.Net.NetworkCredential("MyUsername","MyPassword"); 
$webclient.Credentials = $creds 

# Data prep 
$data = @{Name='Test';} | ConvertTo-Json 

# GET 
$webClient.DownloadString($url) | ConvertFrom-Json 

# POST 
$webClient.UploadString($url,'POST',$data) 

# PUT 
$webClient.UploadString($url,'PUT',$data) 
+0

. ¿Esta es Powershell que usas en producción para consumir servicios web? – Thufir

+0

Estaba respondiendo una pregunta específica relacionada con la interacción con una API JSON a través de PowerShell. Nunca dije que usaría este código en producción. – ShaneC