Этот сайт блокирует / игнорирует мои HTTP-запросы? - PullRequest
2 голосов
/ 23 июля 2011

Я могу получать данные только с сайта, когда использую cURL с прокси.cURL без прокси и file_get_contents() ничего не возвращают (cURL HTTP код "0" и curl_error () Empty reply from server).Я могу нормально получать другие сайты без прокси.

Помимо блокировки, есть ли другие возможные объяснения того, почему я могу получить доступ к этому сайту только через прокси?

Ответы [ 3 ]

3 голосов
/ 23 июля 2011

Это с вашего рабочего места или что-то? Многие компании отключают file_get_contents() на общих установках PHP, так как это довольно рискованно.

На сайте, вероятно, обнаружен пользовательский агент. Вы можете подделать это в своем вызове, но я не верю, что это возможно с file_get_contents(). Другой метод, используемый сайтами, заключается в том, чтобы отображать контент только после того, как был установлен файл cookie, поэтому скребки сайта никогда не увидят данные.

Попробуйте это:

function curl_scrape($url,$data,$proxy,$proxystatus)
{
    $fp = fopen("cookie.txt", "w");
    fclose($fp);
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    if ($proxystatus == 'on')
    {
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    ob_start(); // prevent any output
    return curl_exec ($ch); // execute the curl command
    ob_end_clean(); // stop preventing output
    curl_close ($ch);
    unset($ch);
}
3 голосов
/ 23 июля 2011

Вы установили АГЕНТА ПОЛЬЗОВАТЕЛЯ в cURL? Иногда веб-сайты блокируют вас, если ваш АГЕНТ ПОЛЬЗОВАТЕЛЯ не установлен или ваш HTTP-запрос выглядит подозрительно.

Чтобы установить АГЕНТА ПОЛЬЗОВАТЕЛЯ в PHP:

curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
1 голос
/ 23 июля 2011

Полагаю, меня действительно заблокировали. Используй прокси сейчас и все работает нормально.

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