Pregunta

Estoy trabajando en una variante de linux de la vieja escuela (QNX para ser exactos) y necesito una forma de capturar una página web (sin cookies o iniciar sesión, la URL de destino es solo un archivo de texto) usando solo sockets y arreglos.

¿Alguien tiene un fragmento de esto?

nota: no controlo el servidor y tengo muy poco con lo que trabajar además de lo que ya está en la caja (agregar bibliotecas adicionales no es realmente fácil debido a las limitaciones, aunque me encanta libcurl)

¿Fue útil?

Solución

Tengo algún código, pero también es compatible con (Open) SSL, por lo que es un poco largo para publicar aquí.

En esencia:

  • analice la URL (esquema de URL dividido, nombre de host, número de puerto, parte específica del esquema

  • crea el socket:

    s = socket (PF_INET, SOCK_STREAM, proto);

  • rellene una estructura sockaddr_in con la IP y el puerto remotos

  • conecta el zócalo al otro extremo:

    err = connect (s, & amp; addr, sizeof (addr));

  • crea la cadena de solicitud:

    n = snprinf (encabezados, " GET /% s HTTP / 1.0 \ r \ nHost:% s \ r \ n \ r \ n " ;, ...);

  • enviar la cadena de solicitud:

    escribe (s, encabezados, n);

  • lee los datos:

    while (n = read (s, buffer, bufsize) > 0) {     ... }

  • cierra el socket:

    close(s);

nb: el pseudocódigo anterior recopilaría los encabezados de respuesta y . La división entre los dos es la primera línea en blanco.

Otros consejos

Me gustaría ver libcurl si desea soporte SSL para o cualquier cosa de lujo.

Sin embargo, si solo desea obtener una página web simple desde un puerto 80, simplemente abra un socket tcp, envíe " GET /index.html HTTP / 1.0 \ n \ r \ n \ r " y analizar la salida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top