Как бороться с запретной ошибкой CURL 403? какие решения?

Я использую multi curl для извлечения данных с удаленного сайта. Мой сценарий похож на

foreach ($urls as $i => $url) {
            $ch[$i] = curl_init($url['url']);
            curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0);
            curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0);
            curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
            curl_multi_add_handle($multiCurlHandler, $ch[$i]);
}

он возвращает мне 403 запрещено в ответ.

заранее спасибо за предложения и комментарии.

4 ответов


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

// line 1
$agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

foreach ($urls as $i => $url) {
    $ch[$i] = curl_init($url['url']);
    curl_setopt($ch[$i], CURLOPT_TIMEOUT, 0);
    curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 0);

    // line 2
    curl_setopt($ch[$i], CURLOPT_USERAGENT, $agent);

    curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
    curl_multi_add_handle($multiCurlHandler, $ch[$i]);
}

свяжитесь с тем, кто запускает сайт, к которому вы пытаетесь подключиться, и спросите их, почему ваш запрос запрещен.

затем вы можете либо остановить (если то, что вы делаете, просто считается неприемлемым для них), либо изменить запрос, чтобы он соответствовал их правилам.


попробуйте установить заголовки Referer и User-Agent, но!

... установка curlopt_ssl_verifypeer в false опасна и никогда не должна выполняться в производстве. Оберните эту строку в проверку is_dev как минимум.

вы побеждаете цель SSL, делая это, позволяя злоумышленнику перехватить ваш запрос и вернуть то, что им нравится, не проверяя их SSL-сертификат.


Санджей ответ всегда может помочь. Но когда IP-адрес клиента заблокирован стороной sever, выполните curl на стороне клиента также получите эту ошибку.