【问题标题】:Grails HttpBuilder URL encoded GETGrails HttpBuilder URL 编码 GET
【发布时间】:2012-11-23 14:15:25
【问题描述】:

我想与具有基于 URL 的 API 的网络服务通信。例如我有以下网址:

http://api.bla.com/aaa/bbb.ashx?Action=GetSecurityToken&vendorId=3

我可以将 URL 放入浏览器并获得一个 XML 页面,其中包含所有详细信息。

我想从我的 grails 应用程序中获取 XML 页面,因此我使用以下代码:

http = new HTTPBuilder('http://api.bla.com/aaa/bbb.ashx')
html = http.get( path : '/', query : [Action :"GetSecurityToken", vendorId: "3"] ) )
println html

为什么这不起作用。我收到一个错误的请求。如何在我的 grails 控制器中从上面的 URL 获取 xml 页面?

【问题讨论】:

    标签: xml rest grails httpbuilder


    【解决方案1】:

    我认为最终 url 将是 http://api.bla.com/aaa/bbb.ashx/?Action=GetSecurityToken&vendorId=3 ,因为您将基本 url 定义为 http://api.bla.com/aaa/bbb.ashx 并将调用路径设置为 /

    尝试更改您的基本网址,例如(取自 this 示例):

    def http = new HTTPBuilder('http://api.bla.com/aaa')
    http.get( path : '/bbb.ashx',
              contentType : XML,
              query : [Action :"GetSecurityToken", vendorId: "3"] ) { resp, reader ->
    
      println "response status: ${resp.statusLine}"
      println 'Headers: -----------'
      resp.headers.each { h ->
        println " ${h.name} : ${h.value}"
      }
      println 'Response data: -----'
      System.out << reader
      println '\n--------------------'
    }
    

    【讨论】:

    • 我打开了 HTTPBuilder 的日志记录,发现设置路径:'/' 实际上会让你得到域名的 uri + 查询字符串:http://api.bla.com/?Action=GetSecurityToken&amp;vendorId=3。 Sergio 的解决方案应该可以工作,但您也可以在 get 调用中完全消除路径参数,所以http.get( query : [Action :"GetSecurityToken", vendorId: "3"] )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多