在 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 访问权限。
在登录 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 访问权限。