httpBuilder - 将GetWeather作为参数传递

时间:2017-06-10 02:25:54

标签: groovy

Groovy的新手所以请原谅缺乏知识(现在已经学习了两个星期)。无论如何,我试图发送一个soap请求到globalweather.asmx?WSDL,同时传递GetWeather作为参数,而不是传递XML文本,但我似乎无法得到正确的结果。我尝试搜索有关如何实现此目的的教程但失败了,大多数教程都传递了实际的XML。以下是我到目前为止所尝试的内容。

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1')

import groovyx.net.http.ContentType
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.Method


def http     = new HTTPBuilder('http://www.webservicex.com/globalweather.asmx?WSDL')
def postBody = ['Newark', 'USA'];
//body = postBody
println http.get(path: '', query: [GetWeather: postBody])

1 个答案:

答案 0 :(得分:1)

我们需要更多信息来真正帮助您:您是否尝试将WS请求为SOAP或REST WebService?如果是后者,GET还是POST?

由于您使用的是HTTPBuilder的get方法,我假设您要使用REST GET版本。在这种情况下,您尝试的是将浏览器指向http://www.webservicex.com/globalweather.asmx/GetWeather?CityName=Newark&CountryName=USA网址的程序化等效项。

让我们先分析一下这意味着什么。当您单击该链接时,您的浏览器将向www.webservicex.com服务器发送HTTP GET请求。这个请求没什么特别的,唯一真正有趣的是URL本身。但是,服务器会将URL分解为3个部分(为简单起见而图示化):

  • 主持人:www.webservicex.com
  • 路径:/globalweather.asmx/GetWeather
  • 查询参数:[CityName:'Newark',CountryName:'USA']

如您所见,GetWeather不是参数,而是路径本身的一部分。此外,由于它看起来令人困惑,我将postBody重命名为query,这{看起来像是HTTP POST请求正文的变量}(或将数据直接传递给get方法,在这种情况下)。

它为我们提供了以下代码(也删除了未使用的导入):

import groovyx.net.http.HTTPBuilder

def http     = new HTTPBuilder('http://www.webservicex.com/globalweather.asmx?WSDL')
println http.get(path: '/globalweather.asmx/GetWeather', query: [CityName: 'Newark', CountryName: 'USA'])

哪个有效:返回的值(Data Not Found)与在具有相同输入值的浏览器中使用http://www.webservicex.com/New/Home/ServiceDetail/56上的表单时相同。

使用的文件: