[不花钱站长]:从免费域名开始[0元] Oracle永久免费VPS[0元] VPS环境搭建免费脚本[0元] 秒变大盘挂载免费网盘[0元] 小白免费采集器1天500W[0元] CF免费DNS+CDN服务[0元]
[零基础网赚]:撸本站免费源码[0元] 网站强引免费蜘蛛法[0元] 图片视频文件免费存储[0元] 外链轻松发布免费友链[0元] 入坑免费教程学习源代码[0元] 网上百种+赚钱联盟推荐[?元]

↑↑VPS推荐网 WWW.VPS.COM.IN 稳定 便宜 免备案↑↑


您现在的位置是:首页 > 全球[VPS测评] >  永久免费VPS 香港VPS,国外永久免费VPS

php curl 301 无效 php curl 网页不自动跳转 php CURLOPT_FOLLOWLOCATION 选项无效的解决办法

全球[VPS测评]来源:VPS推荐网点击:1581
【性价之王】【线路之王】【价格之王】【配置之王】
【免费之王】【香港首推】【梯子之王】【独服之王】
php curl 301 无效 php curl 网页不自动跳转 php CURLOPT_FOLLOWLOCATION 选项无效的解决办法

最近突然有同学反馈说微服务系统新用户无法绑定了,绑定功能是通过 curl 登录正方教务系统进行用户验证的,经过检查发现是因为新更换了服务器,程序 curl 登录正方教务系统时无法自动跳转链接。

在 php 中 curl 通过设置 CURLOPT_FOLLOWLOCATION 选项来设置是否自动跟随跳转链接,如果该选项为 true 或 1 则自动跳转,否则不会自动跳转。如果你是新开发的程序,那么首先检查 curl 代码中是否设置了 CURLOPT_FOLLOWLOCATION。

而我这里已经设置了 CURLOPT_FOLLOWLOCATION 为 true,之前也是好用的,那么初步怀疑是服务器中某些设置不兼容导致的。

经过查阅资料发现 php 中 curl 确实有一个 bug,那就是当服务器开启了安全模式或设置了 open_basedir 时,CURLOPT_FOLLOWLOCATION 配置是不起作用的,一些服务器设置的放跨站攻击就是通过 open_basedir 实现的。知道了原因就好办了,这里提供两种解决方案:

方案一:

关闭服务器安全模式或者 open_basedir 设置,这是最简单的做法,不过很多时候我们无法修改服务器的这些设置,那么请看方案二。

方案二:

使用下面的自定义函数执行 curl

function curlExec($curlOptions='', $curlHeaders='', $postFields='') {   $newUrl = '';   $maxRedirection = 10;   do   {     if ($maxRedirection<1) die('Error: reached the limit of redirections');     $ch = curl_init();     if (!empty($curlOptions)) curl_setopt_array($ch, $curlOptions);     if (!empty($curlHeaders)) curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaders);     if (!empty($postFields))     {       curl_setopt($ch, CURLOPT_POST, 1);       curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);     }         if (!empty($newUrl)) curl_setopt($ch, CURLOPT_URL, $newUrl); // redirect needed         $curlResult = curl_exec($ch);     $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);     if ($code == 301 || $code == 302 || $code == 303 || $code == 307)     {       preg_match('/Location:(.*?)n/', $curlResult, $matches);       $newUrl = trim(array_pop($matches));       curl_close($ch);       $maxRedirection--;       continue;     }     else // no more redirection     {       $code = 0;       curl_close($ch);     }   }   while($code);   return $curlResult; }

猜你可能想看的VPS


转载请注明原文地址:http://140.238.13.167:12355/read-208516.html

下一篇       上一篇