tmman
@tmman
Обои из семерки наконец-то пригодились!

CURL: redirect 303?

Дано:
rki.bspu.ru/course/view.php?id=29

$max_redirects = 50;
    $userAgent = 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
    //curl_setopt($ch, CURLOPT_NOBODY, 1);// Не загружать тело ответа
    //curl_setopt($ch, CURLOPT_HEADER, 1);// читать ТОЛЬКО заголовок без тела
    curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //следовать редиректам
    curl_setopt($ch, CURLOPT_POSTREDIR, 7); //Битовая маска, содержащая 1 (301 Moved Permanently), 2 (302 Found) и 4 (303 See Other), чтобы задавать должен ли метод HTTP POST обрабатываться при включенной опции CURLOPT_FOLLOWLOCATION, если произошел указанный тип перенаправления.
    curl_setopt($ch, CURLOPT_MAXREDIRS, $max_redirects); // установим максимальное число возможных редиректов 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //а лучше, наверное, сделать так: http://php.net/manual/en/function.curl-setopt.php#110457
    //curl_setopt($ch, CURLOPT_USERAGENT, $userAgent ); // прикинемся не курлом, а файерфоксом
    curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_exec($ch);


Получаю Maximum (10) redirects followed.

CURLOPT_POSTREDIR -- это опция для POST, но (видимо, здесь вообще бессмысленна), а
Request URL:http://rki.bspu.ru/course/view.php?id=29
Request Method:GET
Status Code:303 See Other
Remote Address:92.50.156.74:80
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:keep-alive
Content-Language:ru
Content-Length:599
Content-Type:text/html; charset=utf-8
Date:Mon, 21 Aug 2017 05:28:05 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Location:http://rki.bspu.ru/user/policy.php
Pragma:no-cache
Server:nginx
X-Powered-By:PHP/5.6.2

говорит, что GET.

В общем, как заставить curl "пойти" по адресу в Location в этому случае?
  • Вопрос задан
  • 639 просмотров
Пригласить эксперта
Ответы на вопрос 1
$location = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

Далее можно новый CURL сделать.

По факту
curl_setopt($ch, CURLOPT_POSTREDIR, 7);
curl_setopt($ch, CURLOPT_MAXREDIRS, $max_redirects);

Не нужен при FOLLOW_LOCATION

Я бы обратил внимание на то, куда Вас отправляют.
Там страница "политика сайта", "использования куки" и пр., которая требует отправки формы с определенным ключом,
После отправки Вы должны получить и сохранить куку от сайта, якобы Вы со всем ознакомились, и далее по сайту спокойно ходить, применяя эту куку
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 нояб. 2024, в 19:08
1500 руб./в час
27 нояб. 2024, в 18:19
2000 руб./за проект
27 нояб. 2024, в 17:41
2000 руб./за проект