example rest powershell

azure rest api example



autenticación HTTP básica de la API REST de powershell (4)

Este es el código que uso para descargar páginas de Confluence como archivos HTML.

$pageid = "176398584" ; $url = "http://wikiserver/wiki/pages/viewpage.action?pageId=$pageid" ; write-host "Establish credentials" ; $r = Invoke-WebRequest "http://wikiserver/wiki/pages/login.action" -SessionVariable my_session ; # $r ; $form = $r.Forms[1]; # $form ; # $c = $host.UI.PromptForCredential(''Your Credentials'', ''Enter Credentials'', '''', '''') ; # $form.fields[''os_username''] = $c.UserName ; # $form.fields[''os_password''] = $c.GetNetworkCredential().Password ; $form.fields[''os_username''] = "mywikirobotlogonname" ; $form.fields[''os_password''] = "mywikirobotpassword" ; $form.fields[''os_cookie''] = "true" ; $form.fields[''os_destination''] = "%2Fpages%2Fviewpage.action%3FpageId%3D$pageid" ; $outputFile = "$pageid.html" ; $content = Invoke-WebRequest -Uri ($url + $form.Action) -WebSession $my_session -Method POST -Body $form.Fields ; $content.ParsedHTML.getElementById("content").innerHTML | Add-Content $outputFile

La UI de host solicitada se puede utilizar para solicitar al usuario que ingrese su información de inicio de sesión.

Descomente una variable para mostrar al sistema los contenidos del formulario, la página recuperada, etc. para solucionar problemas- $ r $ form $ content

Tengo autenticación básica trabajando con REST API usando curl:

curl -X POST -H ''Accept: application/json'' -u user:password http://localhost/test/

Pero, cuando trato de hacer lo mismo con powershell webRequest, obtengo 403 (permiso denegado). Esta secuencia de comandos funciona bien cuando deshabilito la verificación de autenticación en el código REST.

¿Cuál es la mejor manera en PowerShell para pasar credenciales en solicitud POST similar a curl o qué puedo hacer para corregir el siguiente script?

Realmente agradecería alguna orientación sobre esto. Gracias.

Aquí está mi script powershell:

function Execute-HTTPPostCommand() { param( [string] $target = $null ) $username = "user" $password = "pass" $webRequest = [System.Net.WebRequest]::Create($target) $webRequest.ContentType = "text/html" $PostStr = [System.Text.Encoding]::UTF8.GetBytes($Post) $webrequest.ContentLength = $PostStr.Length $webRequest.ServicePoint.Expect100Continue = $false $webRequest.Credentials = New-Object System.Net.NetworkCredential -ArgumentList $username, $password $webRequest.PreAuthenticate = $true $webRequest.Method = "POST" $requestStream = $webRequest.GetRequestStream() $requestStream.Write($PostStr, 0,$PostStr.length) v$requestStream.Close() [System.Net.WebResponse] $resp = $webRequest.GetResponse(); $rs = $resp.GetResponseStream(); [System.IO.StreamReader] $sr = New-Object System.IO.StreamReader -argumentList $rs; [string] $results = $sr.ReadToEnd(); return $results; } $post = "volume=6001F930010310000195000200000000&arrayendpoint=2000001F930010A4&hostendpoint=100000051ED4469C&lun=2" $URL = "http://example.com/test/" Execute-HTTPPostCommand $URL


Tu código se ve bien, intentaría agregar el encabezado HTTP_AUTHORIZATION para $ webrequest como este:

$webRequest.Headers.Add("AUTHORIZATION", "Basic YTph");

Donde YTph sería la cadena base64encoded para nombre de usuario: contraseña.


Sé que este es un hilo antiguo, pero para aquellos que puedan toparse con esto el método invoke-rest es un vehículo mucho mejor y más simple para hacer llamadas API con PowerShell.

Cree una lista de parámetros como una tabla hash:

$params = @{uri = ''https:/api.trello.com/1/TheRestOfYourURIpath''; Method = ''Get''; #(or POST, or whatever) Headers = @{Authorization = ''Basic '' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($acctname):$($password)")); } #end headers hash table } #end $params hash table $var = invoke-restmethod @params

Su tabla hash de parámetros puede diferir ligeramente.

De hecho, no he conseguido que trabaje con Trello, pero sí con GitHub, Serena Business Manager y Jira.


La propiedad de credenciales parece usarse para la autenticación de Windows. Intente utilizar esta función: Forzar autenticación básica en WebRequest Le aconsejaría, en cualquier caso, que utilice algún depurador web, como Fiddler, para ver la diferencia entre la solicitud curl y su solicitud.