Cómo utilizar libcurl para implementar el método HTTP GET para obtener la longitud del archivo
Es muy conveniente usar libcurl para implementar la función de descarga, simplemente llame a la biblioteca libcurl.
Ver fragmentos de código derivados de mis fragmentos de código en Code.
curl_easy_init()
curl_easy_setopt()
curl_easy_perform()
curl_easy_getinfo()
Puedes descargar http, también hay muchos tutoriales de libcurl y mucha información en línea.
Existen muchas prácticas en línea para obtener la longitud de un archivo con libcurl, como se muestra a continuación:
Vea el fragmento de código derivado de mi fragmento de código aquí.
descarga largaFileLenth = 0;
CURL * handle = CURL_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, URL);
curl_easy_setopt(handle, CURLOPT_HEADER, 1); //Solo se requiere el encabezado.
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //No se requiere cuerpo
if(curl_easy_perform(handle)= = CURLE_OK)
{
curl_easy_getinfo(handle, CURLINFO _ CONTENT _ LENGTH _ DOWNLOAD, & ampdownloadFileLenth
}
De lo contrario, {
downloadFileLenth =-1; p>
}
curl_easy_cleanup(handle);
Sin embargo, de forma predeterminada, este método se obtiene a través del modo HEAD de HTTP, pero no todos los servidores HTTP admiten HEAD. modo. Por ejemplo, en mi proyecto,
Hay un servidor HTTP que no admite el modo HEAD y solo puede usar el modo GET para obtener la longitud del archivo, por lo que este modo no es factible. Con suerte, esto se puede lograr con el siguiente fragmento:
Ver fragmentos de código derivados de mi fragmento de código.
descarga largaFileLenth = 0;
CURL * handle = CURL_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, URL);
curl_easy_setopt(handle, CURLOPT_HTTPGET, 1); //Usar HTTPGET
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //No se requiere cuerpo
if(curl _ easy _ perform(handle) ) = = CURLE _ OK)
{
curl_easy_getinfo(handle, CURLINFO _ CONTENT _ LENGTH _ DOWNLOAD, & ampdownloadFileLenth
}
);De lo contrario{
downloadFileLenth =-1;
}
curl_easy_cleanup(handle);
Pero encontrado Aún obtenido en head modo. Al observar el código fuente de libcurl, encontramos que cuando se configura CURLOPT_NOBODY, libcurl establecerá el modo de adquisición en modo principal de forma predeterminada. Si
Si ninguna opción está configurada, el contenido del archivo se descargará nuevamente. Entonces el código anterior no puede satisfacer.
No puedo evitar echar un vistazo al código fuente de libcurl y finalmente encontré la siguiente solución:
Ver fragmentos de código derivados del mío en el código.
descarga largaFileLenth = 0;
CURL * handle = CURL_easy_init();
curl_easy_setopt(handle, CURLOPT_URL, URL);
curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, "GET"); //Usar CURLOPT_CUSTOMREQUEST
curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //No se requiere cuerpo
if(curl _ easy _ perform (mango) = = CURLE _ OK)
{
curl_easy_getinfo(mango, CURLINFO _ CONTENT _ LENGTH _ DOWNLOAD, & ampdownloadFileLenth
}); p>
En caso contrario{
downloadFileLenth =-1;
}
curl_easy_cleanup(handle);
Puede resolver perfectamente el problema de usar GET para obtener la longitud del archivo sin descargar el contenido del archivo.