Обрабатывать перенаправление и файлы cookie в PHP и cURL для запуска curl -b -c -d -Lvk в php

#php #rest #curl #cookies

#php #rest #curl #файлы cookie

Вопрос:

Я пытаюсь вызвать Rest API, используя PHP и cURL. Из-за ограничения брандмауэра (F5) URL-адрес конечной точки перенаправляется на «my.policy», устанавливает несколько файлов cookie и снова перенаправляет его обратно на нужный URL-адрес конечной точки.

введите описание изображения здесь

Чтобы управлять этим перенаправлением и настройкой файлов cookie, я обнаружил, что curl -b cookie.txt -c cookie.txt -d cookie.txt -Lvk https://myendpointurl эта команда помогает автоматически сохранять и устанавливать файлы cookie при следующем перенаправлении, и она работает так, как ожидалось.

Но как добиться этого в PHP?

Я попытался установить COOKIEJAR и COOKIEFILE, а также установить для FOLLOWLOCATION значение true, но безуспешно.

 curl_setopt($curl_request, CURLOPT_URL, $url);
curl_setopt($curl_request, CURLOPT_POST, 1);
curl_setopt($curl_request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($curl_request, CURLOPT_HEADER, 1);
curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);    
curl_setopt($curl_request, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_request, CURLOPT_POSTREDIR, CURL_REDIR_POST_301);
curl_setopt($curl_request, CURLINFO_HEADER_OUT, 1);
curl_setopt($curl_request, CURLOPT_COOKIEJAR, dirname(__FILE__) .'/cookies.txt');
curl_setopt($curl_request, CURLOPT_COOKIEFILE, dirname(__FILE__) .'/cookies.txt');
 

Как выполнить приведенную выше команду curl в PHP и cURL?

Ответ №1:

Я обнаружил, что для хранения и вызова файлов cookie через HTTPS curl -b cookie.txt -c cookie.txt -Lvk https://myendpointurl достаточно только, -d не требуется.

Для достижения этого достаточно того, какой код я опубликовал в вопросе, за исключением изменения в CURLOPT_POSTREDIR . Я изменил его с CURL_REDIR_POST_301 на CURL_REDIR_POST_ALL , что означает, что он использует POST метод во всех перенаправленных URL-адресах.

Я публикую это как ответ, который может помочь кому-то, кто сталкивается с такой же ситуацией.