2011-01-02 21 views
11

He estado mirando a mi alrededor y estoy bastante sorprendido de que no haya medios para analizar encabezados genéricamente en libcurl (que parece ser la biblioteca canónica de C para http en estos días).¿Cómo se analizan los encabezados HTTP con libcurl?

Lo más parecido que encontré fue una publicación de la lista de correo donde alguien sugirió que alguien más buscara a través de los archivos de la lista de correo.

La única instalación que es proporcionado por libcurl través setopt es CURLOPT_HEADERFUNCTION que alimentarán las respuestas de cabecera una sola línea a la vez.

Esto parece demasiado primitivo considerando headers can span multiple lines. Idealmente, esto debería hacerse una vez correctamente (preferiblemente por la biblioteca misma) y no dejarse para que los desarrolladores de aplicaciones reinventen continuamente.

Editar:

Un ejemplo de lo ingenuo que no trabaja, ver la siguiente GIST con un ejemplo de código libcurl y una respuesta http adecuadamente formado que no puede analizar: https://gist.github.com/762954

+0

Estoy bien contigo. Lo desafortunado es que libcurl también parece que procesa líneas de encabezado incluso si no se proporciona 'CURLOPT_HEADERFUNCTION' y' CURLOPT_HEADER' se establece en verdadero. es decir, está haciendo mucho léxico que es bastante inútil. – jberryman

Respuesta

11

Hace más de un año, así que creo que cerraré esto como "manualmente". O:

Si usted está teniendo problemas rizo, me siento mal por hijo,

cabeceras de varias líneas que tienes y hay que analizar cada uno.

+5

libcurl es un proyecto de código abierto. Significa que depende de las contribuciones de los voluntarios. ¡Tú puedes ser uno! –

7

libcurl lee el encabezado completo y lo envía como una sola línea completa a la devolución de llamada.

Las líneas de encabezado HTTP "Continued" no están permitidas en la familia HTTP 1.1 RFC 7230, y prácticamente se extinguieron incluso antes de eso.

+4

Puede ser que los encabezados de varias líneas sean inusuales, pero es válido y preferiría no solo tener una aplicación completamente rota si se topa con ella. – Dustin

+1

No están permitidos en HTTPbis, que es la actualización pendiente de la especificación HTTP ... agregar soporte hoy para eso me parece totalmente inútil. Pero seguro seguir adelante si ese es tu juego. –

+0

"libcurl lee el encabezado completo y lo envía como una sola línea completa a la devolución de llamada". Esto no es correcto cuando lo leí. libcurl parece enviar una línea a la vez (incluidos los caracteres de salto de línea, e incluye el '\ r \ n' final) a la devolución de llamada hasta que llega a la sección de cuerpo. Como señala @Dustin, esto es bastante inútil si no tienes control total sobre los servidores de los que tu cliente está recibiendo respuestas. – jberryman

Cuestiones relacionadas