Почему пользовательский запрос curl HEAD зависает для weebly.com?

Когда я делаю

$h = get_headers('http://www.weebly.com');

Это работает просто отлично … Заголовки для этой страницы быстро возвращаются.

Но если я попытаюсь получить заголовки через явный запрос HEAD, используя curl …

 $url = 'http://www.weebly.com';
$request_headers = array(
'Connection: close',
);
$user_agent = 'curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15';
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_CUSTOMREQUEST => 'HEAD',
CURLOPT_HEADER => TRUE,
CURLOPT_HTTPHEADER => $request_headers,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_MAXREDIRS => 10,
CURLOPT_USERAGENT => $user_agent,
));

$result = curl_exec($ch);

Запрос не заканчивается.

Что не так с моей настройкой CURL? Это работает для других сайтов для http://www.google.com но для некоторых, таких как поползни, это заканчивается тем, что висит.

0

Решение

Потому что libcurl будет действовать так, как будто используется GET, но вы меняете метод только в фактическом запросе на HEAD, и это все портит, поскольку у ответа HEAD, вероятно, есть заголовок Content-Length: но нет тела ответа.

«Правильный» способ заставить libcurl выполнить HEAD и ожидать ответа HEAD — использовать CURLOPT_NOBODY вместо.

CURLOPT_CUSTOMREQUEST следует использовать только для изменения ключевого слова метода, а не для изменения поведения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]