如何在PHP CURL请求中启用credentials: "include"参数?
在PHP CURL中实现类似fetch
credentials: "include"的功能 JavaScript里的credentials: "include"作用是让请求携带当前域名下的Cookie、HTTP认证凭证(跨域场景下也会发送)。在PHP CURL中,要实现相同效果,需要通过Cookie相关的选项配置来完成,具体如下:
核心配置说明
CURLOPT_COOKIEFILE:指定读取Cookie的文件路径(如果需要复用之前存储的Cookie),即使文件为空也要设置,这样CURL才会发送CookieCURLOPT_COOKIEJAR:指定保存响应返回的Cookie的文件路径(可选,用于后续请求复用Cookie)- 如果需要手动指定特定Cookie值,可以用
CURLOPT_COOKIE直接设置字符串格式的Cookie(比如"name=value; name2=value2")
修改后的完整PHP代码
<?php // 注意:以下两个Access-Control头是给前端跨域请求用的,和当前CURL请求无关,根据实际需求保留 header("Access-Control-Allow-Origin: *"); header('Access-Control-Allow-Credentials: true'); $headersArray = array("Content-Type:application/json"); $rawData = array( "key0" => "value0" ); $jsonData = json_encode($rawData); $curl = curl_init(); // 定义Cookie存储路径(可以自定义路径,确保PHP有读写权限) $cookieFile = __DIR__ . '/curl_cookies.txt'; curl_setopt_array($curl, array( CURLOPT_URL => "api-path", // 替换为实际的API地址 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTPHEADER => $headersArray, CURLOPT_POSTFIELDS => $jsonData, // 关键:开启Cookie发送与存储 CURLOPT_COOKIEFILE => $cookieFile, // 读取已有Cookie CURLOPT_COOKIEJAR => $cookieFile, // 保存响应的Cookie // 如果需要手动指定Cookie,取消下面注释并修改内容 // CURLOPT_COOKIE => "key01=value01; key02=value02", CURLOPT_RETURNTRANSFER => true, // 让curl_exec返回内容而不是直接输出 )); $response = curl_exec($curl); curl_close($curl); $phpObject = json_decode($response, true); echo "<br>param 01 value = " . $phpObject["param-01-key"]; ?>
额外注意事项
- 确保
$cookieFile指定的路径有PHP的读写权限,否则Cookie无法正常读取或存储 - 如果API服务器依赖的是特定会话Cookie,你需要先获取到对应的Cookie值(比如通过登录请求),再通过
CURLOPT_COOKIE或CURLOPT_COOKIEFILE携带 - 原代码中的
Access-Control-Allow-Origin: *和Access-Control-Allow-Credentials: true不能同时生效(浏览器规定),如果前端需要带凭证请求,Access-Control-Allow-Origin必须指定具体域名而非通配符
内容的提问来源于stack exchange,提问作者crazy innovator
相关产品推荐
相关产品推荐

