PHP通过Curl实现基于Cookie的认证时获取的Cookie无效问题求助
可行解决思路
- 修复cookie文件读取路径错误:你定义
$getNewCookieFile为脚本目录下的绝对路径,但后续file_get_contents('getNewCookieFile.txt')用了相对路径,若脚本执行工作目录和脚本所在目录不一致,会读取失败拿到空session值,统一改为绝对路径即可。 - 给CURL请求添加浏览器UA标识:多数站点会校验User-Agent,无合法UA的请求会被返回无效Cookie,添加配置:
curl_setopt($curlHandler, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'); - 开启CURL重定向跟随:部分站点认证流程会触发302/301跳转,未开启跟随的情况下你拿到的是跳转前的未授权Cookie,添加配置:
curl_setopt($curlHandler, CURLOPT_FOLLOWLOCATION, true); - 放弃手动解析Cookie文件:CURL生成的CookieJar是Netscape标准格式,硬编码截取46位的逻辑容错率极低,Cookie长度、字段顺序变化都会导致取值错误。你可以直接用CURL发起第二次请求,复用CookieJar即可,示例:
// 复用之前的CURL配置发起第二次请求,无需手动解析Cookie curl_setopt($curlHandler, CURLOPT_URL, $websiteUrl.'/authorization/required'); curl_setopt($curlHandler, CURLOPT_COOKIEFILE, $getNewCookieFile); $documentsSite = curl_exec($curlHandler); - 补全请求头校验字段:和浏览器正常发起的请求对比,补全
Referer、Origin等站点要求的请求头,避免因为头缺失被拦截。
内容的提问来源于stack exchange,提问作者Michael Farhat
相关产品推荐
相关产品推荐

