cURL извлекает только заголовок без заголовка - PullRequest
0 голосов
/ 03 июня 2019

Поэтому я пытаюсь получить только заголовки, используя cURL, со следующим:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);

Проблема в том, что при попытке получить заголовки большого файла скрипт использует всю память.Я хотел бы также избежать получения тела, и я попытался использовать:

curl_setopt($ch, CURLOPT_NOBODY, true);

Проблема в том, что это вызывает запрос HEAD вместо GET.И некоторые веб-сайты повторяют ошибку при запросе с HEAD.

Есть ли способ с помощью curl получить только заголовок без выполнения запроса HEAD?

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Если вам не нужно использовать cURL, вы можете использовать get_headers().По умолчанию get_headers использует GET-запрос для получения заголовков.И вы также можете изменить этот запрос, используя stream_context_set_default()

$headers = get_headers('http://example.com');

Дополнительная информация: PHP: get_headers

0 голосов
/ 03 июня 2019

Во-первых, не используйте CURLOPT_RETURNTRANSFER, так как это опция, которая заставляет хранить весь ответ в памяти.

Затем, два варианта:

A) использовать обратный вызов записи исделайте так, чтобы прервать передачу, как только будет возвращен первый байт тела.В документации PHP.net есть пример обратного вызова записи .

B) использует CURLOPT_RANGE и запрашивает только первый байт, который нужно извлечь, 0-0.Это позволяет избежать обратного вызова записи, но имеет недостаток, заключающийся в том, что не все HTTP-серверы и URL-адреса будут подтверждать его.

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