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])
答案 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个部分(为简单起见而图示化):
如您所见,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上的表单时相同。
使用的文件: