ACCESS DENIED
小Z小Z  2019-08-23 13:21 主机之家测评 隐藏边栏 |   抢沙发  117 
文章评分 0 次,平均分 0.0

最近突然有同学反馈说微服务系统新用户无法绑定了,绑定功能是通过 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(/* Array */$curlOptions='', /* Array */$curlHeaders='', /* Array */$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;  }
声明:1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
小Z
小Z 关注:0    粉丝:0
【声明】:本站宗旨是为方便站长、科研及外贸人员,请勿用于其它非法用途!站内所有内容及资源,均来自网络。本站自身不提供任何资源的储存及下载,若无意侵犯到您的权利,请及时与我们联系。

发表评论

扫一扫二维码分享