`
berdy
  • 浏览: 508942 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

groovy 操作http请求

 
阅读更多
话不多说,先上一段代码,如果你使用过jquery,看到这样的代码是不是很亲切呢?

def http = new HTTPBuilder('http://www.baidu.com')
http.request(GET,TEXT) {
	//设置url相关信息
	uri.path='/'
	uri.query=[a:'1',b:2]
	//设置请求头信息
	headers.'User-Agent' = 'Mozill/5.0'
	//设置成功响应的处理闭包
	response.success= {resp,reader->
		println resp.status
		println resp.statusLine.statusCode
		println resp.headers.'content-length'
		System.out << reader
	}
	//根据响应状态码分别指定处理闭包
	response.'404' = { println 'not found' }
	//未根据响应码指定的失败处理闭包
	response.failure = { println "Unexpected failure: ${resp.statusLine}" }
}


request 方法中有三个参数1、请求方法 2、contenttype 3、 封装请求配置的一个闭包
在请求配置闭包中可以设置请求的相关参数以及对响应的处理闭包,更多详细配置可以参考:
RequestConfigDelegate

如果在request方法的参数中未设置ContentType参数,默认是使用ContentType.ANY,也就是说具体的文档类型取决于服务器端
指定了这参数后,就会强制按照这个参数来解析响应内容,而不管respone中的Content-Type值,几种常用的类型处理:
TEXT,纯文本
XML,采用XmlSlurper解析内容
HTML,先采用NekoHTML使HTML规范化,之后采用XmlSlurper解析DOM
JSON,采用JSON-lib解析内容

有了上面的粗略了解后,下面再各个细分详解:

1、GET请求
def http = new HTTPBuilder('http://www.google.com.hk')
http.request(GET, TEXT) {
	uri.path="/search"
	uri.query = [q:'groovy']

	response.success ={resp,reader->
		println resp.statusLine.statusCode
		println resp.headers.'content-length'
		System.out << reader
	}
	response.failure={resp-> println resp.status }
}

上面的代码发起一个get请求,并对返回的html内容强制以TEXT形式处理
HTTPBuilder提供了一个更简洁的方式发送get请求
def http = new HTTPBuilder('http://www.google.com.hk')
//简化的get请求
def html = http.get(path:'/search',query:[q:'groovy'])
//根据响应的contentType头信息,指定对应的处理方式,html的经过xmlslurper处理后返回的 是GPathResult实例
assert html instanceof groovy.util.slurpersupport.GPathResult
assert html.HEAD.size() == 1
assert html.BODY.size() == 1


2、POST请求
def http = new HTTPBuilder('http://localhost:8080/test')
http.request(POST) {
	uri.path = '/update'
	body=[name:'berdy']
	requestContentType=URLENC
	response.success={resp->
		assert 	resp.statusLine.statusCode
	}
}

上面代码中的body参数指定了post请求提交的参数,requestContentType指定了提交参数的处理类型,
这里指定使用urlencoder对提交的参数编码处理,若未指定就会使用request方法中指定的响应内容
处理类型,在上面的代码中并未指定响应内容的处理类型,所以就是ContentType.ANY了。在上面delegate
中提供了send()方法同时处理request content-type 和 request data
send URLENC, [ name : 'berdy'] 

同样的HTTPBuilder也提供了一个简洁的post请求方式
def http = new HTTPBuilder('http://localhost:8080/test')
def postBody = [name:'berdy']
http.post(path:'/update',body:postBody,requestContentType:URLENC){resp->
	assert resp.statusLine.statusCode == 200
}


3、json格式数据处理;
处理响应内容中的json数据
def http = new HTTPBuilder('http://localhost:8080/test')
//根据responsedata中的Content-Type header,调用json解析器处理responsedata
http.get(path:'/getJson'){resp,json->
	println resp.status
	json.each{
		println it	
	}
}

处理post请求中的json数据
def http = new HTTPBuilder('http://localhost:8080/test')
http.request( POST, JSON ) { req ->
	uri.path='/postJson'
	body = [
	  first : 'berdy',
	  last : 'lengfeng'
	]
	
	response.success = { resp, json ->
		// TODO process json data
	}
}

也可以使用send()方法处理:
def http = new HTTPBuilder('http://localhost:8080/test')
http.request( POST, JSON ) { req ->
	uri.path='/postJson'
	send 'text/javascript',[body : [
	  first : 'berdy',
	  last : 'lengfeng'
	]]
	response.success = { resp, json ->
		// TODO process json data
	}
}


另外,针对ContentType中为定义的类型,可以在parser中注册需要的处理器
http.parser.'text/csv' = { resp ->
   return new CSVReader( new InputStreamReader( resp.entity.content
            , ParserRegistry.getCharset( resp ) ) )
}

http.get( uri : 'http://localhost:8080/test/test.csv'
        , contentType : 'text/csv' ) { resp, csv ->
   assert csv instanceof CSVReader
   // parse the csv stream here.
}


其他关于http的验证,REST支持,请参考:
groovy-http module
0
0
分享到:
评论
1 楼 hong52533 2015-05-28  
大哥,请问你用 groovy Httpbuilder post文件你做过吗?找了很久没找到代码。网上的文档太少了。。。

相关推荐

    java开源包7

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    soapui-plugin-file-export:SoapUI OS Pro File Utility插件-用于从Project,TestSuite,TestCase和TestStep级别导出请求和响应

    该插件有助于导出SOAP / REST / HTTP测试步骤的原始请求和原始响应,在该操作中,可以对单个TestStep执行操作,对于批量导出,用户可以使用TestCase / TestSuite / Project级别的操作。 如何安装插件? 用户需要将...

    企业后台管理基础框架 hsweb.zip

    request: 请求模拟(http,ftp)hsweb-expands-script:动态脚本,动态编译执行java,groovy,javascript,spel,ognl....hsweb-expands-shell:shell执行hsweb-expands-template:各种模板引擎 标签:hsweb

    word源码java-hsweb-framework:forkfromhttps://github.com/hs-web,主要用于学习

    请求模拟(http,ftp) :动态脚本,动态编译执行java,groovy,javascript,spel,ognl.... :shell执行 :各种模板引擎 安装 $ git clone https://github.com/hs-web/hsweb-framework.git $ cd hsweb-framework

    针对Java开发者的ApacheCamel入门指南

    你可以在使用不同的协议比如VM,HTTP,FTP,JMS甚至是文件系统中来传递消息,并且让你的操作逻辑和传递逻辑保持分离,这能够让你更专注于消息的内容。在这篇文章中,我将提供一个Java语言(非Groovy)的ApacheCamel...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    java开源包1

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    Syntaxtic !「Syntaxtic!」-crx插件

    为每个请求添加.cc作为c ++别名,为.per作为perl别名v1.1.33-修复了动作脚本为c#问题-修复了.cc别名v2.0.43-添加了选项页,可选的主题和大小v2.0.44-删除了未使用的权限v3.0.74-添加了操作按钮以禁用当前页面的行号...

    java开源包11

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包2

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包3

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包6

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包5

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包10

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包4

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包8

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包9

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    java开源包101

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    Java资源包01

    集中管理请求参数与参数映射 以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

Global site tag (gtag.js) - Google Analytics