首页 > Web开发 > 详细

guzzlehttp中的坑之带子目录的域名

时间:2020-08-21 20:45:09      阅读:64      评论:0      收藏:0      [点我收藏+]

1、问题

  线上开发环境配的是带子目录的域名,例如:https://aa.com/bb。使用nginx的location代理到项目的根目录。在代码中使用guzzlehttp访问这域名下的API时,一直报404。我给到guzzlehttp client的base url是https://aa.com/bb。请求的API是/api/someinterface?query=query。当我把base url切换到本地虚拟域名http://qq.dew时,接口返回200。

2、原因

  guzzlehttp会将解析base url和API解析成schema、host、path、query。

  (1)当api的path以/开头时,guzzlehttp就会将base url中的schema、host和api中的path、query组装起来,导致base url中的path丢失。结果就变成https://aa.com/api/someinterface?query=query

    (2) 当base url的path为空,就给api path开头加上/。否则就从base url path的中找反斜杠/最后一次出现的位置lastSlashPos,这时候lastSlashPos就是0。最终会从base url path的0号位置到lastSlashPos+1的位置截取字符串,然后拼接API的path。最终结果还是https://aa.com/api/someinterface?query=query。也就是说如果base url是一个带子目录的域名,那么一定要以反斜杠/结尾

3、结论

  (1)如果base url是一个带子目录的域名,那么一定要以反斜杠/结尾

  (2)API可以以反斜杠开头,也可以不要

 

guzzlehttp中的坑之带子目录的域名

原文:https://www.cnblogs.com/fengliang/p/13542912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!