2010-08-26 25 views

risposta

22

ho creato questa funzione Get-Http per fare richieste 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() 

Trattare con il risultato finale in formato XML è davvero semplice, tuttavia, se si desidera elaborare JSON probabilmente avrà bisogno qualche libreria Net come JSON.Net.

42

Quello che vuoi è PowerShell 3 ei suoi cmdlet Invoke-RestMethod, ConvertTo-Json e ConvertFrom-Json. Il tuo codice finirà per assomigliare:

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

e non ci dovrebbe essere anche un bisogno di invocare ConvertFrom-Json sulla conseguente $stuff => è già in un formato non stringa utilizzabile.

Vedere http://technet.microsoft.com/en-us/Library/hh849971.aspx per dettagli.

+0

Funzionerà con SharePoint 2010? – craig

+0

Potrebbe anche essere necessario fornire le credenziali. In questo caso si dovrebbe eseguire un comando come $ stuff = Invoke-RestMethod -Uri $ url -Method Get -Credential "dominio \ username". –

+0

C'è un modo per trasmettere le credenziali per l'autenticazione di base? Quello che Jubblerbug ha detto funziona per presentare un popup che richiede la password, ma ho bisogno di automatizzare questo –

5

Usiamo Powershell per interrogare un'API REST che si occupa solo di dati in stile Json. All'inizio è stato complicato, ma il codice riportato di seguito è tutto ciò di cui abbiamo bisogno per eseguire la maggior parte delle operazioni:

# 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

questo è PowerShell che usi in produzione per consumare servizi web? – Thufir

+0

Stavo rispondendo a una domanda specifica relativa all'interazione con un'API JSON tramite PowerShell. Non ho mai detto che avrei usato questo codice in produzione. – ShaneC