Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Tutoriales / Los rincones del API Win32: WinInet y HTTP - Lectura de datos

Los rincones del API Win32: WinInet y HTTP - Lectura de datos

 ----- 
Creative Commons Tutorial de Juan Manuel - 27 de Agosto de 2005
Temas Relacionados: Programación estructurada
8. Lectura de datos
Una vez que hemos enviado una petición a través de la red, ya sea con el método directo o detallado, será procesada por el servidor HTTP que devolverá una respuesta al cliente. Esta respuesta, como ya hemos visto, se compone de una cabecera y los datos que hemos pedido en la petición. A través de Wininet, podemos acceder tanto a los datos de cabecera (que nos proporcionan información sobre el recurso), como al recurso en sí.




Lectura de datos de cabecera

Wininet mantiene internamente la estructura de la cabecera retornada, y nos permite acceder a ella a través de una función: HttpQueryInfo.

Esta función nos facilita la lectura de datos de la cabecera, indicando el atributo del cual queremos obtener el dato.

La sintaxis es la siguiente:

BOOL HttpQueryInfo( HINTERNET hPetición, DWORD dwInformación, LPVOID lpBuffer, LPDWORD lpdwLongitudBuffer, LPDWORD lpdwIndice );

  • hPetición: un descriptor de petición, obtenido a través de la función InternetOpenUrl (o HttpOpenRequest, utilizando el método detallado, aunque no lo hayamos explicado).
  • dwInformación: es un valor combinado entre el atributo a leer y los modificadores que podemos aplicar. A continuación doy una lista de los atributos más importantes que podemos leer, aunque se puede consultar una lista más completa en web del MSDN de Microsoft.
    La mayoría de estas contantes corresponden con un atributo de la respuesta del protocolo HTTP, como Last-Modified, Content-Type, etc.
    • HTTP_QUERY_STATUS_CODE: el código de retorno devuelto por el servidor.
    • HTTP_QUERY_STATUS_TEXT: descripción del estado devuelto por el servidor.
    • HTTP_QUERY_DATE: fecha y hora en que se originó la petición.
    • HTTP_QUERY_SERVER: información acerca del servidor HTTP que ha generado esta respuesta.
    • HTTP_QUERY_MIME_VERSION: la versión de los tipos MIME utilizados en la respuesta.
    • HTTP_QUERY_CONTENT_TYPE: el tipo MIME del recurso leído.
    • HTTP_QUERY_CONTENT_LENGTH: el tamaño, en bytes, del recurso leído.
    • HTTP_QUERY_LAST_MODIFIED: fecha y hora de la última modificación el recurso.
    • HTTP_QUERY_CUSTOM: nos permite buscar un atributo dentro de las cabeceras adicionales pasadas durante la llamada a InternetOpenUrl o HttpSendRequest. El nombre de la cabecera que queremos buscar debemos pasarlo a través del parámetro lpBuffer.
    • HTTP_QUERY_EXPIRES: la fecha y hora a partir de la cual se considera el recurso como caducado.
    • HTTP_QUERY_ALLOW: consulta las operaciones soportadas por el servidor.
    • HTTP_QUERY_REQUEST_METHOD: el tipo de operación que se ha utilizado en la petición.
    • HTTP_QUERY_ACCEPT: los tipos de datos MIME que acepta el servidor.
    • HTTP_QUERY_RAW_HEADERS: retorna toda la cabecera recibida. Cada atributo está terminado por el carácter 0 y la secuencia final está terminada por un doble carácter 0, del siguiente modo: "attr: valor\0attr: valor\0attr: valor\0\0"
    • HTTP_QUERY_RAW_HEADERS_CRLF: igual que el anterior, pero se separa cada cabecera por un retorno de carro, del siguiente modo: "attr: valor\nattr: valor\nattr: valor\0"


Además de los atributos posibles, se puede combinar con alguno de los siguientes modificadores:
    • HTTP_QUERY_FLAG_NUMBER: retorna el atributo pedido como si fuera un número de 32 bits (por ejemplo en el atributo Content-Length).
    • HTTP_QUERY_FLAG_SYSTEMTIME: retorna el atributo pedido como una estructura de tipo SYSTEMTIME. Se puede ver una descripción de la estructura SYSTEMTIME aquí.
      Esta bandera puede utilizarse para retornar cualquier atributo de tipo fecha-hora como Last-Modified, Expires, etc.
  • lpBuffer: un puntero a un espacio de memoria donde se almacenará el atributo que hemos pedido a través del parámetro dwInformación. El atributo se retornará en formato cadena, a no ser que se haya utilizado alguna bandera de modificación, en cuyo caso se retornará en el formato indicado (número o estructura SYSTEMTIME).
  • lpdwLongitudBuffer: un puntero a un número de 32 bits que almacena el tamaño del buffer pasado en lpBuffer. Cuando la función retorna, almacena en este parámetro el tamaño en bytes del valor retornado (incluido el carácter nulo final para cadenas) o bien el tamaño en bytes requerido si la función ha retornado FALSE y GetLastError nos ha devuelto el código de error ERROR_INSUFFICIENT_BUFFER.
  • lpdwIndice: cuando se retorna un atributo con varios valores (como HTTP_QUERY_ACCEPT), este valor indica el índice (comenzando en 0) del valor a obtener. Al retornar, la función almacena en este parámetro el índice del siguiente valor, o el valor de la contstante ERROR_HTTP_HEADER_NOT_FOUND si ya no hay más valores. Si se va a consultar un atributo sencillo, se debe pasar el valor 0.

La función retornará TRUE o FALSE dependiendo del éxito o fracaso. En caso de error, debemos llamar a GetLastError para averiguar las razones del fracaso (retornará, por ejemplo el valor ERROR_INSUFFICIENT_BUFFER si el tamaño de la memoria en lpBuffer es demasiado pequeño).
Autor y licencia de 'Los rincones del API Win32: WinInet y HTTP - Lectura de datos'
Juan Manuel Extraído de: http://www.lawebdejm.com

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Los rincones del API Win32: WinInet y HTTP - Lectura de datos'

En el anterior curso dejamos muchos temas en el tintero, así que voy a terminar... Más »
El protocolo FTP desde el API WinInet. Con este curso aprenderás a hacer un pequeño... Más »
Comienzo con un nuevo tema dentro dentro de la serie Los rincones del API Win32.... Más »
Damos una visión detallada de una de las características más interesantes de esta tecnología de... Más »
La lectura del mundo se hace a partes iguales, desde la palabra que enuncia los... Más »
¿Estás seguro de que deseas eliminar este capítulo?