SDK Multiplataforma en C logo

SDK Multiplataforma en C

HTTP

❮ Anterior
Siguiente ❯

Funciones

Http*http_create (...)
Http*http_secure (...)
voidhttp_destroy (...)
voidhttp_clear_headers (...)
voidhttp_add_header (...)
bool_thttp_get (...)
bool_thttp_post (...)
uint32_thttp_response_status (...)
const char_t*http_response_protocol (...)
const char_t*http_response_message (...)
uint32_thttp_response_size (...)
const char_t*http_response_name (...)
const char_t*http_response_value (...)
const char_t*http_response_header (...)
bool_thttp_response_body (...)
Stream*http_dget (...)
bool_thttp_exists (...)

Es habitual que una aplicación necesite información más allá de la almacenada en el propio computador. La forma más sencilla y habitual de compartir información es almacenarla en un Servidor Web y publicar una URL que provea el contenido deseado (Figura 1). Este esquema cliente/servidor utiliza el protocolo HTTP/HTTPS, que fue originalmente diseñado para transmitir documentos HTML entre servidores Web y navegadores. Debido a la gran repercusión que ha tenido a lo largo de los años, se ha ido ampliando su uso para el intercambio de información estructurada entre cualquier aplicación que "entienda" HTTP. La respuesta del servidor será, por lo general, un bloque de texto formateado en JSON o XML.

Protocolo HTTP, esquema de funcionamiento básico.
Figura 1: Petición de un recurso remoto mediante HTTP.

Por otro lado, si vamos a realizar sucesivas llamadas a un mismo servidor o si necesitamos mayor control sobre las cabeceras HTTP, deberemos crear una sesión (Listado 2).

Listado 2: Sesión HTTP.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
Stream *webpage = NULL;

Http *http = http_secure("nappgui.com", UINT16_MAX);
if (http_get(http, "/en/start/win_mac_linux.html", NULL, 0, NULL) == TRUE)
{
    if (http_response_status(http) == 200)
    {
        webpage = stm_memory(1024);
        if (http_response_body(http, webpage, NULL) == FALSE)
            stm_close(&webpage);
    }
}

http_destroy(&http);

if (webpage != NULL)
{
    ...
    stm_close(&webpage);
}

http_create ()

Crea una sesión HTTP.

Http*
http_create(const char_t *host,
            const uint16_t port);
host

Nombre del servidor.

port

Puerto de conexión. Si pasamos UINT16_MAX se utilizará 80 (por defecto para HTTP).

Retorna

Sesión HTTP.


http_secure ()

Crea una sesión HTTPS.

Http*
http_secure(const char_t *host,
            const uint16_t port);
host

Nombre del servidor.

port

Puerto de conexión. Si pasamos UINT16_MAX se utilizará 413 (por defecto para HTTP).

Retorna

Sesión HTTPS.


http_destroy ()

Destruye una sesión HTTP.

void
http_destroy(Http **http);
http

La sesión HTTP. Será puesto a NULL tras la destrucción.


http_clear_headers ()

Elimina las cabeceras HTTP previamente asignadas.

void
http_clear_headers(Http *http);
http

La sesión HTTP.


http_add_header ()

Añade una cabecera a la petición HTTP.

void
http_add_header(Http *http,
                const char_t *name,
                const char_t *value);
http

La sesión HTTP.

name

El nombre de la cabecera.

value

El valor de la cabecera.


http_get ()

Realiza una petición tipo GET.

bool_t
http_get(Http *http,
         const char_t *path,
         const byte_t *data,
         const uint32_t size,
         ierror_t *error);
http

La sesión HTTP.

path

Dirección del recurso.

data

Datos para añadir en el cuerpo de la petición. Puede ser NULL.

size

Tamaño en bytes del bloque de datos.

error

Código de error si la función falla. Puede ser NULL.

Retorna

TRUE si la petición se ha llevado a cabo correctamente. Si FALSE, en error tendremos la causa.

Observaciones

La petición es síncrona, es decir, el programa quedará detenido hasta que el servidor responda. Si queremos un modelo asíncrono deberemos crear un hilo paralelo que gestione la petición. Las redirecciones HTTP se resuelven automáticamente.


http_post ()

Realiza una petición tipo POST.

bool_t
http_post(Http *http,
          const char_t *path,
          const byte_t *data,
          const uint32_t size,
          ierror_t *error);
http

La sesión HTTP.

path

Dirección del recurso.

data

Datos para añadir en el cuerpo de la petición. Puede ser NULL.

size

Tamaño en bytes del bloque de datos.

error

Código de error si la función falla. Puede ser NULL.

Retorna

TRUE si la petición se ha llevado a cabo correctamente. Si FALSE, en error tendremos la causa.

Observaciones

Ver http_get.


http_response_status ()

Devuelve el código de respuesta de una petición HTTP.

uint32_t
http_response_status(const Http *http);
http

La sesión HTTP.

Retorna

El código de respuesta del servidor.


http_response_protocol ()

Devuelve el protocolo utilizado por el servidor HTTP.

const char_t*
http_response_protocol(const Http *http);
http

La sesión HTTP.

Retorna

El protocolo del servidor.


http_response_message ()

Devuelve el mensaje de respuesta del servidor HTTP.

const char_t*
http_response_message(const Http *http);
http

La sesión HTTP.

Retorna

El mensaje de respuesta del servidor.


http_response_size ()

Devuelve el número de cabeceras de respuesta de una petición HTTP.

uint32_t
http_response_size(const Http *http);
http

La sesión HTTP.

Retorna

El número de cabeceras.


http_response_name ()

Devuelve el nombre de la cabecera de respuesta de una petición HTTP.

const char_t*
http_response_name(const Http *http,
                   const uint32_t index);
http

La sesión HTTP.

index

El índice de la cabecera (0, size-1).

Retorna

El nombre de la cabecera.


http_response_value ()

Devuelve el valor de la cabecera de respuesta de una petición HTTP.

const char_t*
http_response_value(const Http *http,
                    const uint32_t index);
http

La sesión HTTP.

index

El índice de la cabecera (0, size-1).

Retorna

El valor de la cabecera.


http_response_header ()

Devuelve el valor de una cabecera de respuesta de una petición HTTP.

const char_t*
http_response_header(const Http *http,
                     const char_t *name);
http

La sesión HTTP.

name

El nombre de la cabecera deseada.

Retorna

El valor de la cabecera. Si la cabecera no existe, devolverá una cadena vacía "".


http_response_body ()

Devuelve el cuerpo de la respuesta de una petición HTTP.

bool_t
http_response_body(const Http *http,
                   Stream *body,
                   ierror_t *error);
http

La sesión HTTP.

body

Stream de escritura donde se almacenará el contenido de la respuesta.

error

Código de error si la función falla. Puede ser NULL.

Retorna

TRUE si se ha podido leer correctamente. Si FALSE, en error tendremos la causa.


http_dget ()

Realiza una petición directa de un recurso Web.

Stream*
http_dget(const char_t *url,
          uint32_t *result,
          ierror_t *error);
1
2
3
4
5
6
Stream *json = http_dget("http://serv.nappgui.com:80/dproducts.php", NULL, NULL);
if (json)
{
    ...
    stm_close(&json);
}
url

URL del recurso.

result

Código de respuesta del servido. Puede ser NULL.

error

Código de error si la función falla. Puede ser NULL.

Retorna

Stream con el resultado de la petición.

Observaciones

Utiliza esta función para el acceso directo a un recurso aislado. Si necesitas realizar varias peticiones o configurar las cabeceras, utiliza http_create o http_secure.


http_exists ()

Chequea si un recurso Web está disponible/accesible.

bool_t
http_exists(const char_t *url);
url

URL del recurso.

Retorna

TRUE si el recurso (página Web, archivo, etc) está accesible.

Observaciones

No se resuelven las redirecciones HTTP. Retornará FALSE si la URL tal cual no es válida.

❮ Anterior
Siguiente ❯