#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-адресах.
Я публикую это как ответ, который может помочь кому-то, кто сталкивается с такой же ситуацией.