HTTP POST
HTTP POST
Sección titulada «HTTP POST»Tipo: http-post · Paquete: HTTP Activities v1.0.5 · Salida: ZoanHttpResponse
Envía una petición POST, normalmente para crear un recurso o enviar datos a una API: registrar un cliente, enviar un formulario, disparar una acción. A diferencia de GET, incluye un cuerpo (body) con los datos.
Cómo funciona
Sección titulada «Cómo funciona»Envía el body a la url y devuelve un ZoanHttpResponse.
- Cuerpo: con el
contentTypepor defecto (application/json) elbodyse convierte a JSON — un diccionario se envía como objeto, una lista como arreglo. Con cualquier otrocontentType, elbodyse envía como texto tal cual. Siempre en UTF-8. Ver cuerpo y Content-Type. - Códigos de respuesta: con 2xx termina bien; cualquier otro código hace fallar la actividad — ver qué códigos hacen fallar la actividad.
- Tiempos: 30 s para conectar y, por defecto, 5 min para la petición completa (parámetro
timeout). Si se agotan, la actividad falla con un error normal que Try / Catch y Retry capturan — ver tiempos de espera. - No es idempotente: repetir un POST suele crear el recurso dos veces. Antes de envolverlo en Retry, confirma que la API lo tolera (por ejemplo, con una clave de idempotencia en
headers, si la API la ofrece).
Parámetros requeridos
Sección titulada «Parámetros requeridos»| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
url | string | — | URL absoluta de la petición (https://…). |
body | object | — | El cuerpo: un diccionario o lista (se envía como JSON) o un texto (para otros contentType). Con contentType JSON, un texto se envía como cadena JSON entre comillas; si tienes JSON en un texto, usa parseJson(texto). |
Parámetros opcionales
Sección titulada «Parámetros opcionales»| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
contentType | string | "application/json" | Tipo de medio del cuerpo, sin parámetros (ej. application/json, text/xml, application/x-www-form-urlencoded). charset=utf-8 se agrega solo. |
headers | Dictionary | — | Cabeceras extra (nombre → valor), en el editor JSON. Las cabeceras de contenido se ignoran: usa contentType. Ver cabeceras. |
authorization | Dictionary | — | Autenticación en el editor JSON: bearer, basic o apikey. Ver autenticación. |
timeout | int | 300 | Segundos que se espera la petición completa (conexión, envío y respuesta); máximo 3600, admite decimales (0.5). Desde la versión 1.0.5. Ver tiempos de espera. |
Devuelve un ZoanHttpResponse con .StatusCode (2xx; las APIs suelen responder 201 al crear), .Ok (siempre true en una salida recibida), .Body (JSON → diccionario/lista; otra cosa → texto; vacío → "") y .Headers. Muchas APIs devuelven en .Body el recurso creado con su nuevo id, o su ubicación en resp.Headers["Location"].
Errores comunes
Sección titulada «Errores comunes»| Mensaje | Causa y solución |
|---|---|
El servidor respondió HTTP 400 (Bad Request) a la solicitud POST. | El servidor rechazó la petición (400 datos inválidos, 401/403 autenticación, 409 duplicado, 5xx error del servidor). El mensaje no trae el cuerpo de la respuesta: revisa el formato que espera la API. Para manejarlo, usa Try / Catch. |
The format of value 'application/json; charset=utf-8' is invalid. | contentType lleva parámetros. Deja solo el tipo de medio (application/json); el charset UTF-8 se agrega solo. |
No such host is known. (u otro error de red del sistema) | No hubo respuesta (nombre de servidor, red, certificado). error.Type es "HttpRequestException". |
La solicitud POST a api.ejemplo.com no terminó en 300 s (tiempo de espera agotado). Sube «Tiempo de espera» si el servicio tarda más. | El servidor no respondió dentro de timeout. error.Type es \"TimeoutException\": captúralo con Try / Catch o reintenta con Retry; si la API tarda por naturaleza, sube timeout. Si el fallo es al conectar, el mensaje dice No se pudo conectar con … en 30 s. |
An invalid request URI was provided. Either the request URI must be an absolute URI or BaseAddress must be set. | La url no es absoluta. Incluye https://. |
'url' es obligatorio. | La expresión de url dio nulo. |
Desde la versión 1.0.5, si el servidor no responde a tiempo la actividad falla con un error capturable (TimeoutException); antes la ejecución terminaba como cancelada — ver tiempos de espera.
Ejemplo
Sección titulada «Ejemplo»Crear un cliente enviando un objeto como JSON y usar el id que devuelve la API:
HTTP POST url = "https://api.erp.com/clientes" body = new Dictionary<string, object> { ["nombre"] = nombreCliente, ["nit"] = nit, ["activo"] = true } authorization = { "type": "bearer", "token": credential("api-erp")["value"] } → output: resp
Set Variable name = nuevoId value = resp.Body["id"]Log message = "Cliente creado con id " + nuevoId + " (HTTP " + resp.StatusCode + ")"Enviar XML a un servicio que no usa JSON:
HTTP POST url = "https://servicios.ejemplo.com/facturas" contentType = "text/xml" body = xmlFactura → output: respLog message = "Respuesta del servicio: " + str(resp.Body)Actividades relacionadas
Sección titulada «Actividades relacionadas»- HTTP PUT / HTTP PATCH — actualizar un recurso existente.
- HTTP GET — leer datos.
- Try / Catch — manejar respuestas de error.