# fetchRemote (Servidor)

> Faz uma requisição HTTP ou HTTPS e entrega a resposta a uma função quando ela chega.

- **Plataforma**: MY Multiplayer (MYMP)
- **Tipo**: Função Lua
- **Lado**: Servidor
- **Categoria**: Rede e HTTP
- **URL**: https://wiki.mymp.gg/pt/fetchRemote

## Sintaxe

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

## Parâmetros

| Nome | Tipo | Descrição |
| --- | --- | --- |
| `url` | `string` | O endereço, começando por `http://` ou `https://`. Outro começo gera erro. |
| `options` | `table` | Tabela opcional: `method` (`GET`, `POST`, `PUT`, `PATCH`, `DELETE` ou `HEAD`; com `postData` e sem método, `POST`), `headers` (nome → valor), `postData` (o corpo enviado) e `connectTimeout` (em ms, de 1000 a 60000, 10000 se ausente). Um método desconhecido gera erro. *(padrão: `nil`)* |
| `callback` | `function` | Chamada com o corpo da resposta, a tabela `info` e os argumentos extras. |
| `...` | `any` | Argumentos passados ao `callback` depois de `info`. |

## Retorno

`true` se a requisição foi enviada. Dentro de `async.thread` e sem `callback`, a função espera a resposta e devolve o corpo e a tabela `info`.

`info` tem `success` (`true` quando o status é 2xx), `statusCode`, `headers` (nome → valor) e, se a requisição falhou, `error`. Quando o recurso para, as respostas que ainda não chegaram são descartadas.

## Exemplo

```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("a requisição falhou: " .. (info.error or info.statusCode))
    end
end)
```

### Vindo do MTA

Das opções do MTA, só `method`, `headers`, `postData` e `connectTimeout` são lidas. Dentro de `async.thread`, o `callback` pode ficar de fora e a chamada espera a resposta.

## Veja também

- [async.thread (Compartilhado)](https://wiki.mymp.gg/pt/async.thread.md): Roda uma função numa thread async nova, na hora. A chamada retorna quando a função termina ou faz a primeira pausa, como async.wait.
- [fromJSON (Compartilhado)](https://wiki.mymp.gg/pt/fromJSON.md): Converte texto JSON num valor Lua. É a mesma função que json.decode.
- [toJSON (Compartilhado)](https://wiki.mymp.gg/pt/toJSON.md): Converte um valor Lua em texto JSON. É a mesma função que json.encode.
