`
berdy
  • 浏览: 513623 次
  • 性别: 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文件你做过吗?找了很久没找到代码。网上的文档太少了。。。

相关推荐

    groovy http请求

    在Groovy中发送HTTP请求是开发者经常需要进行的操作,尤其是在进行API测试或者集成第三方服务时。下面我们将深入探讨如何在Groovy中执行HTTP请求,并分享一些实用的工具和技巧。 1. **HTTP请求方法**: - GET:...

    Groovy&Grails准备,收集的Groovy与Grails的书籍

    4. **Grails Command Objects**:用于收集HTTP请求数据,提供验证和数据转换功能,减少了Controller中的代码量。 5. **Grails Plugins**:丰富的插件生态系统,如缓存、安全、测试等,快速增强应用功能。 6. ** ...

    rexsee文档和api使用groovy爬下来分享给大家

    源码可能是用Groovy编写的爬虫程序,展示了如何操作HTTP请求和解析HTML结构。而工具可能指的是Groovy环境、依赖库或其他有助于爬虫工作的软件。 至于压缩包子文件的文件名称列表只给出了 "java",这可能意味着...

    Groovy and Grails Recipes.pdf

    - **控制器**:处理HTTP请求并将数据传递给视图层。 - **视图**:使用GSP(Groovy Server Pages)或FreeMarker等模板引擎来渲染页面。 - **服务层**:封装业务逻辑,提高代码重用性。 **5. Grails插件机制** - ...

    java 动态脚本语言 精通 Groovy

    9. **Scripting in Java Applications**:Groovy可以嵌入到Java应用中作为脚本语言使用,例如在服务器端处理HTTP请求,或者作为配置文件来动态改变应用行为。 10. **持续集成与构建工具**:Groovy也是构建工具如...

    groovy编写webservice服务端和客户端(含连接数据并输出JSON数据)

    - Groovy的`HttpBuilder`库可以帮助简化HTTP请求的创建,方便实现服务端接口。 4. **连接数据**: - 在Groovy中,可以使用JDBC(Java Database Connectivity)来连接和操作数据库。 - 示例代码可能包含创建...

    groovy框架数据收集

    例如,可以使用`java.io`包下的类来读取和写入文件,或者使用`java.net`包下的类来实现HTTP请求,获取网页数据。对于大规模数据的处理,Groovy还支持流式处理,通过`BufferedReader`和`PrintWriter`等类进行高效的...

    Groovy 学习笔记

    3. **Controllers和Views**: Grails的控制器处理HTTP请求,视图负责渲染数据,两者结合实现业务逻辑和用户界面的分离。 4. **Grails命令行工具**: 提供了创建项目、生成代码、运行和测试应用的命令,加速开发流程。 ...

    groovy-servlet-2.3.2.zip

    Servlet则是Java EE中用于构建Web应用程序的标准接口,它可以处理HTTP请求并返回响应。 描述中的 "jcabi-manifests.zip, manifest.mf文件管理器" 指出jcabi-manifests是一个与管理Java应用程序的MANIFEST.MF文件...

    Java 开发 2_0 通过 CouchDB 和 Groovy 的 RESTClient 实现 REST

    Groovy的RESTClient库是一个强大的工具,用于发送HTTP请求并处理响应,这对于与CouchDB进行交互非常实用。RESTClient库支持GET、POST、PUT、DELETE等HTTP方法,可以轻松地执行CRUD(创建、读取、更新、删除)操作。 ...

    Groovy用户指南

    - **控制器**:处理HTTP请求。 - **视图**:展示数据。 - **模型**:存储业务逻辑。 4. **数据库交互**:Groovy提供了多种与数据库交互的方式,包括JDBC、ORM等。 ```groovy import groovy.sql.Sql def sql ...

    Grails+groovy 完整参考手册.7z

    2. **Controllers**:控制器负责接收HTTP请求,处理业务逻辑,并将结果传递给视图进行渲染。 3. **Views**:视图负责呈现用户界面,通常基于模板引擎,如GSP(Grails Server Pages)。 4. **Services**:服务层用于...

    Groovy In Action

    8. **网络编程**:介绍如何使用Groovy进行HTTP请求、Socket通信等网络编程。 9. **构建工具Grails与Gradle**:Groovy广泛应用于构建工具,如Grails(一个基于Groovy的Web应用框架)和Gradle(一个灵活的构建管理...

    Grails-开源框架---使用指南.pdf与Groovy入门经典(中文).pdf(2合一)

    3. **Grails Command Objects:** 用于处理请求数据,可以验证用户输入,提供了一种更安全、更可控的方式来管理HTTP请求。 4. **GSP(Grails Server Pages):** Grails的视图层技术,类似JSP,但语法更为简洁,...

    groovy语法掘金1

    Groovy可以方便地处理HTTP请求来获取JSON内容: ```groovy def getNetworkData(String url) { def connection = new URL(url).openConnection() connection.setRequestMethod('GET') connection.connect() def ...

    Android-KotlinHTTP请求库与Pythonrequests类似

    这个库模仿了Python中广受欢迎的`requests`库,为开发者提供了简单易用的API来执行HTTP请求。在本文中,我们将深入探讨`khttp`库的核心功能、如何集成到Android项目中以及如何使用它来进行网络通信。 1. **khttp库...

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    4. **运行和测试**:完成以上步骤后,你可以通过HTTP请求访问`http://yourserver/yourapp/helloWorld`来测试Groovy Action。如果一切正常,你应该能看到`HelloWorld.jsp`页面加载。 使用Groovy与Struts2集成的优点...

    Gails入门指南(中文) + Groovy快速入门(中文)

    6. **控制器和视图**:掌握如何编写控制器以处理HTTP请求,并返回响应。同时,学习使用Groovy模板引擎创建动态视图。 7. **URL映射**:理解Gails的URL映射机制,如何定义和控制URL到控制器方法的映射。 8. **插件...

    Groovy+Tapestry5+Spring2.5+Hibernate3.2实现CRUD

    在这个项目中,Tapestry 5可能会用于创建用户界面,管理页面间的导航,以及处理HTTP请求和响应。 3. **Spring 2.5**: Spring是Java企业级应用的一个核心框架,2.5版本是其较早的一个稳定版本。它提供依赖注入...

    Groovy&Grails - 指南.ppt

    1. `grails-app/controllers`:包含应用的控制器,负责处理 HTTP 请求。 2. `grails-app/domain`:存放领域模型,与数据库交互的对象。 3. `grails-app/views`:存储视图文件,通常是 GSP(Groovy Server Pages),...

Global site tag (gtag.js) - Google Analytics