Peticiones HTTP con PowerShell

Publicado el 12.05.2025 a las 23:17

Peticiones HTTP con PowerShell

  1. HTTP GET con Invoke-RestMethod de PowerShell

  2. HTTP POST con Invoke-RestMethod de PowerShell

Logo de fjmduran

Peticiones HTTP con PowerShell

No dependas de nadie


Esta semana he tenido que hacer la puesta en marcha de un Sistema en el que iba incluido una API REST con autenticación para poder obtener datos de un servidor de PostgreSQL instalado en un Windows Server2022.


Cuando has desplegado unas decenas de API´s esto no supone ningún reto.


  • Instalas el IIS desde la consola de administración del servidor.
  • Instalas complementos de Microsoft para .NET desde la misma consola.
  • Creas una aplicación en IIS.
  • Configuras donde está el código fuente.
  • Declaras el puerto por el que quieres servir la API.
  • Pruebas que todo bien y listo.

En ocasiones cuando quieres usar la API obtienes el típico error 500.19, te dejo un artículo donde te cuento cómo solventarlo.


Imagen del artículo

HTTP error 500.19 en IIS

Error HTTP 500.19 al desplegar una API REST ASP.NET en IIS

Para probar las API me gusta usar Postman, tengo varios entornos y funciona bien.


Pero hay ocasiones en los que no me dan permisos para instalar aplicaciones en los servidores de despliegue.


Suele ser bastante común.


Y los servidores están con lo mínimo, no tienen ni CURL instalado.


Cuando me enfrentaba a uno de estos servidors acaba haciendo las pruebas con fetch de la API del navegador, Microsoft Edge sí que lo tienen instalado.


Pero es un coñazo usar la consola del navegador para esto.


En esta ocasión he usado el cmdlet de PowerShell Invoke-RestMethod


Invoke-RestMethod es un cmdlet en PowerShell que nos permite interactuar con servicios web y APIs RESTful.


Podemos hacer peticiones HTTP como GET, POST, PUT, DELETE, etc., y maneja automáticamente la conversión de las respuestas JSON y XML a objetos PowerShell para facilitarnos la vida.

HTTP GET con Invoke-RestMethod de PowerShell

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3VhcmlvIjoiU01BIiwicm9sIjoxLCJpYXQiOiIxNzE4MTE4MTA0IiwiZXhwIjoiMTcxODIwNDUwNCIsImlkX3VzdWFyaW8iOjB9.lE98zQCkh8sfSR0Yf6VHFIGIFBKdmpOkHFwx8wZKLXo")

$response = Invoke-RestMethod 'https://endpoint' -Method 'GET' -Headers $headers
$response | ConvertTo-Json
    

HTTP POST con Invoke-RestMethod de PowerShell

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json")

$body = @"
{
	`"usuario`":`"user`",
	`"password`": `"password`"
}
"@

$response = Invoke-RestMethod 'http://endpoint' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
        

Hasta luego 🖖