Как получить длину файла без загрузки файла в двоичном запросе на получение cURL - PullRequest
7 голосов
/ 06 октября 2011

Я хочу создать запрос cURL в некотором коде C ++, который получит длину файла на сервере без загрузки файла. Для этого я использую несколько опций cURL, чтобы указать, что мне нужны только заголовки в ответе на запрос, а затем проверяю ответ, чтобы узнать длину файла.

Я устанавливаю следующие параметры запроса:

curl_easy_setopt(_curl_handle, CURLOPT_HEADER, 1);
curl_easy_setopt(_curl_handle, CURLOPT_NOBODY, 1);

Затем обрабатывает запрос, ожидает ответа, который показывает OK=200, и, наконец, запрашивает длину файла:

curl_easy_getinfo(_curl_handle, CURLINFO_CONTENT_LENGTH_UPLOAD, &dResult);

Но я получаю длину файла -1. Согласно документации cURL, это означает, что размер неизвестен. Как может случиться, что cURL не получает информацию о длине файла с сервера?

Ответы [ 3 ]

7 голосов
/ 07 октября 2011

CURLINFO_CONTENT_LENGTH_UPLOAD - количество загруженных байтов.Вместо этого вам нужно использовать CURLINFO_CONTENT_LENGTH_DOWNLOAD.

Обратите внимание, что если сервер динамически генерирует данные, длина при загрузке файла может отличаться от длины загружаемых заголовков.

Также обратите вниманиечто если сервер отправляет данные как сжатые при загрузке, в заголовках может не быть доступного размера (если вместо заголовка Content-Length используется заголовок Transfer-Encoding), поэтому CURLINFO_CONTENT_LENGTH_DOWNLOAD все равно вернет -1.Единственный способ узнать размер в этой ситуации - это загрузить его полностью.

3 голосов
/ 06 октября 2011

Вы пробовали с CURLINFO_CONTENT_LENGTH_DOWNLOAD вместо этого?

1 голос
/ 31 июля 2012

нужно позвонить perform()

curl_easy_setopt (_curl_handle, CURLOPT_HEADER, 1); curl_easy_setopt (_curl_handle, CURLOPT_NOBODY, 1);

curl_easy_perform (_curl_handle);

curl_easy_getinfo (_curl_handle, CURLINFO_CONTENT_LENGTH_UPLOAD, & DResult);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...