php curl 不返回任何信息——一个 bug 修一下午

  • A+
所属分类:PHP

偶然发现学校的教务系统能用统一认证系统账号登录(吐槽一下,我还一直以为教务系统只能用独立的密码登录),刚好最近写了个统一登录的 php 类,便想着能不能通过代码登录教务系统,并通过 api 查询信息。
前面一切顺利,也获取到了 ticket,但是通过 curl 携带 ticket 去访问回调页面,没有任何返回。
没有返回就算了,连报错信息也没有输出。
php curl 不返回任何信息——一个 bug 修一下午
于是使用 curl_getinfo 输出了一下信息
说来奇怪,这个地方 http code 是 0,网上查询了一下也没能找到解决办法
php curl 不返回任何信息——一个 bug 修一下午
后面又用了 file\_get\_contents 去直接获取,返回 404
这里说明一下,这个回调页面 404 是 ticket 过期/无效/已使用时才出现
但是我把链接复制到浏览器又是能正常登录的
而后尝试更改代码逻辑、修改 curl 部分代码,还是不行
尝试 power shell 中使用 wget/curl 也是能正常访问的,便怀疑是 php 的 curl 问题了(恕我经验不足)
于是使用 GuzzleHttp 代替,运行后我终于找到了问题所在

这是之前的输出:
php curl 不返回任何信息——一个 bug 修一下午
这是 Guzzle 的报错:
php curl 不返回任何信息——一个 bug 修一下午
原来是 ticket 后多了个 %0D ,搜索得知这是换行符的问题
php curl 不返回任何信息——一个 bug 修一下午
代码中替换掉即可
php curl 不返回任何信息——一个 bug 修一下午
使用 ticket 登录教务系统后,获取到 cookie 携带 cookie 访问接口即可查询到信息(图中为空教室信息)
php curl 不返回任何信息——一个 bug 修一下午

参考: WGET时URL后面多了‘%0D‘的处理方式_wYc037的博客-CSDN博客

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: