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

2023 年 9 月 1 日 星期五(已编辑)
/ , , , ,
299
这篇文章上次修改于 2023 年 9 月 4 日 星期一,可能部分内容已经不适用,如有疑问可询问作者。

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

偶然发现学校的教务系统能用统一认证系统账号登录(吐槽一下,我还一直以为教务系统只能用独立的密码登录),刚好最近写了个统一登录的 php 类,便想着能不能通过代码登录教务系统,并通过 api 查询信息。

前面一切顺利,也获取到了 ticket,但是通过 curl 携带 ticket 去访问回调页面,没有任何返回。

没有返回就算了,连报错信息也没有输出。

于是使用 curl_getinfo 输出了一下信息

说来奇怪,这个地方 http code 是 0,网上查询了一下也没能找到解决办法

后面又用了 file_get_contents 去直接获取,返回 404

这里说明一下,这个回调页面 404 是 ticket 过期/无效/已使用时才出现

但是我把链接复制到浏览器又是能正常登录的

而后尝试更改代码逻辑、修改 curl 部分代码,还是不行

尝试 power shell 中使用 wget/curl 也是能正常访问的,便怀疑是 php 的 curl 问题了(恕我经验不足)

于是使用 GuzzleHttp 代替,运行后我终于找到了问题所在!

 

这是之前的输出:

这是 Guzzle 的报错:

原来是 ticket 后多了个 %0D ,搜索得知这是换行符的问题

代码中替换掉即可

使用 ticket 登录教务系统后,获取到 cookie

携带 cookie 访问接口即可查询到信息(图中为空教室信息)

 

参考:

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

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...