在 PHP Curl 服务器端获取和设置 Cookie

Getting and setting Cookies in PHP Curl Serverside

在登录 API 期间,我正在通过 CURL 接收一些服务器设置。我有以下脚本可以提取收到的 Cookie。我需要以下 Curl 调用来发送第一次调用时收到的 cookie - 不知何故我无法让它工作:

<?php 
$ch = curl_init('https://www.test.com/getcookie');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = array();
foreach($matches[1] as $item) {
parse_str($item, $cookie);
$cookies = array_merge($cookies, $cookie); }

var_dump($cookies);
?>

在此之后我想调用另一个 API 服务并发送刚收到的 cookie,但这不起作用?

<?php

$curl = curl_init( 'https://test.com/api' );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $token ) );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $curl, CURLOPT_COOKIEFILE, $cookies);
$getbalance = curl_exec( $curl );
curl_close($curl);
?>

curl 自主管理 cookie,您无需解析和设置它们:

<?php 
$ch = curl_init('https://www.test.com/getcookie');

$cookiesFile = "cookies.txt"; // <--- cookies are stored here

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false); // <---

curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiesFile ); // <---
curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookiesFile ); // <---

$result = curl_exec($ch);

curl_close($ch);

if( $result === false ) {
    // failure
}

然后

<?php

$cookiesFile = "cookies.txt"; // <--- cookies are retrieved here

$curl = curl_init( 'https://test.com/api' );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $token ) );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt( $curl, CURLOPT_COOKIEFILE, $cookiesFile ); // <---
curl_setopt( $curl, CURLOPT_COOKIEJAR,  $cookiesFile ); // <---

$getbalance = curl_exec( $curl );
curl_close($curl);

您可以指定一个文件,curl 在上面的示例中存储和读取 cookie。

在随后的 curl 调用中更新 cookies 文件。

Cookie 文件不需要在第一次调用之前存在,但当然 PHP 必须具有 read/write 访问权限。