# fetchRemote (Servidor)

> Hace una petición HTTP o HTTPS y entrega la respuesta a una función cuando llega.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Función Lua
- **Lado**: Servidor
- **Categoría**: Red y HTTP
- **URL**: https://wiki.mymp.gg/es/fetchRemote

## Sintaxis

```lua
bool|string, table fetchRemote(string url, function callback, any ... [, table options = nil])
```

## Parámetros

| Nombre | Tipo | Descripción |
| --- | --- | --- |
| `url` | `string` | La dirección, empezando por `http://` o `https://`. Otro comienzo genera un error. |
| `options` | `table` | Tabla opcional: `method` (`GET`, `POST`, `PUT`, `PATCH`, `DELETE` o `HEAD`; con `postData` y sin método, `POST`), `headers` (nombre → valor), `postData` (el cuerpo enviado) y `connectTimeout` (en ms, de 1000 a 60000, 10000 si falta). Un método desconocido genera un error. *(por defecto: `nil`)* |
| `callback` | `function` | Se llama con el cuerpo de la respuesta, la tabla `info` y los argumentos extra. |
| `...` | `any` | Argumentos pasados a `callback` después de `info`. |

## Retorno

`true` si la petición se envió. Dentro de `async.thread` y sin `callback`, la función espera la respuesta y devuelve el cuerpo y la tabla `info`.

`info` tiene `success` (`true` cuando el estado es 2xx), `statusCode`, `headers` (nombre → valor) y, si la petición falló, `error`. Cuando el recurso se detiene, las respuestas que aún no llegaron se descartan.

## Ejemplo

```lua
local options = {
    method = "POST",
    headers = { ["Content-Type"] = "application/json" },
    postData = toJSON({ event = "server_started" }),
}

fetchRemote("https://example.com/api/events", options, function(body, info)
    if not info.success then
        outputDebugString("la solicitud falló: " .. (info.error or info.statusCode))
    end
end)
```

### Si vienes de MTA

De las opciones de MTA, solo se leen `method`, `headers`, `postData` y `connectTimeout`. Dentro de `async.thread`, `callback` puede omitirse y la llamada espera la respuesta.

## Ver también

- [async.thread (Compartido)](https://wiki.mymp.gg/es/async.thread.md): Ejecuta una función en un hilo async nuevo, en el acto. La llamada vuelve cuando la función termina o hace su primera pausa, como con async.wait.
- [fromJSON (Compartido)](https://wiki.mymp.gg/es/fromJSON.md): Convierte texto JSON en un valor de Lua. Es la misma función que json.decode.
- [toJSON (Compartido)](https://wiki.mymp.gg/es/toJSON.md): Convierte un valor de Lua en texto JSON. Es la misma función que json.encode.
