Используя cURL с PHP, невозможно получить заголовки для меньшинства сайтов - PullRequest
2 голосов
/ 18 сентября 2009

У меня проблемы с использованием curl для получения заголовков для меньшинства сайтов.

Некоторые примеры - digg.com и microsoft.com.

function get_headers_curl($url, $port)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,            $url);
    curl_setopt($ch, CURLOPT_HEADER,         true);
    curl_setopt($ch, CURLOPT_NOBODY,         true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_PORT,           $port);
    curl_setopt($ch, CURLOPT_TIMEOUT,        10);

    $r = curl_exec($ch);
    $r = split("\n", $r);
    return $r;
}

Это функция и опции, которые я использую в настоящее время, и для удобства использования у меня есть небольшой тестовый скрипт, работающий @ isitup.org / test.php? D = example.com . Он просто возвращает заголовки ответа, а на примерах сайтов его не хватает.

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

Есть что-то, что я пропускаю? Или просто невозможно получить доступ к таким сайтам с помощью curl?

С уважением,

Sam

Edit:

test.php имеет следующий вид:

<code><?php

$domain = preg_replace("/[^A-Za-z0-9-\/\.\:]/", "", trim($_GET["d"]));

$agent = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8";

function get_headers_curl($url, $port)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,            $url);
//  curl_setopt($ch, CURLOPT_HEADER,         true);
//  curl_setopt($ch, CURLOPT_NOBODY,         true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_PORT,           $port);
    curl_setopt($ch, CURLOPT_TIMEOUT,        10);
    curl_setopt($ch, CURLOPT_USERAGENT,      $agent);


    $r = curl_exec($ch);
    $r = split("\n", $r);
    return $r;
}

$headers = get_headers_curl("http://".$domain, 80);

print("<pre>".print_r($headers,true)."
"); ?>

Однако новый пользовательский агент все еще не получает ответ от этих сайтов ...

Обновление: Woops увидел мою ошибку, переместил агента в функцию и да, она работает! Спасибо: P

1 Ответ

4 голосов
/ 18 сентября 2009

Оба отлично работают, когда я добавляю строку агента пользователя с CURLOPT_USERAGENT.

// e.g.
$agent = 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8';
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...