PHP Curl带Cookie发起GET请求返回403无法获取JSON,如何解决?
问题排查点
- Cookie有效性问题
你使用的ci_session是CodeIgniter框架的会话Cookie,这类Cookie通常会和获取时的客户端IP、User-Agent绑定,如果你是从浏览器里复制的Cookie,只要curl请求的IP、UA和浏览器不一致,或者Cookie已经过期,服务端会直接判定会话无效返回403。 - 缺少必填请求头
多数站点的接口会额外校验User-Agent、Referer、X-Requested-With等请求头,你当前仅传入了Cookie和Accept头,缺失的话会被服务端的安全策略拦截。 - Cookie不完整
如果该站点的身份凭证不止ci_session一个Cookie,你只传了单个Cookie也会导致身份校验失败。 - 请求参数缺失
确认该接口是否需要传入额外的Query查询参数,参数缺失也会触发403返回。
修正后的代码示例
$url = "URL HERE"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 直接使用CURLOPT_COOKIE设置Cookie更规范,避免头格式错误 curl_setopt($curl, CURLOPT_COOKIE, 'ci_session=COOKIE HERE'); $headers = array( "Accept: application/json", "User-Agent: 替换为你获取Cookie时的浏览器UA", "Referer: 替换为该接口所属页面的地址", "X-Requested-With: XMLHttpRequest" ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // 开启错误打印方便排查 curl_setopt($curl, CURLOPT_VERBOSE, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); // 打印请求状态码方便确认问题 $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); var_dump($httpCode, $resp); curl_close($curl);
内容的提问来源于stack exchange,提问作者Pureway75
相关产品推荐
相关产品推荐

