zoukankan      html  css  js  c++  java
  • guzzlehttp中的坑之带子目录的域名

    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不要以反斜杠开头

  • 相关阅读:
    jperf windows
    Eclipse+Maven命令创建webapp项目<三>
    Eclipse+Maven创建webapp项目<二>
    Eclipse+Maven创建webapp项目<一>
    在java中定义有几种类加载器
    JAVA创建对象有哪几种方式 ?
    js创建对象的几种常用方式小结(推荐)
    maven安装以及eclipse配置maven
    MyEclipse 10.0安装及激活步骤
    jdk下载网址
  • 原文地址:https://www.cnblogs.com/fengliang/p/13542912.html
Copyright © 2011-2022 走看看