¿Cuál es la forma más fácil de tomar una página web en C?
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)
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.