类似于HttpClient的Java类库 - HTTPBuilder
fmms
13年前
<p>如果熟悉HttpClient,那么你对 HTTPBuilder就不会感到陌生,它是对前者的封装,使之更符合Groovy的使用惯例。下面的例子摘自HTTPBuilder的文档,它充分展示 了自己的特点:</p> <ul> <li>Builder and parser support for <a href="/misc/goto?guid=4959517485830758671">XML</a>, <a href="/misc/goto?guid=4959517485910744344">JSON</a>, and HTML</li> <li>Easy <a href="/misc/goto?guid=4959517485995192352">URI manipulation</a></li> <li>Streamlined <a href="/misc/goto?guid=4959517486084220741">client for REST</a> interfaces</li> <li>Built-in support for GZIP and Deflate content-encoding</li> <li>Built-in support for most <a href="/misc/goto?guid=4959517486168474290">common authentication schemes</a></li> <li>Status code based <a href="/misc/goto?guid=4959517486242213503">response handling</a></li> <li>Convenience methods for <a href="/misc/goto?guid=4959517486321521417">GET</a> and <a href="/misc/goto?guid=4959517486398590483">POST</a></li> <li><a href="/misc/goto?guid=4959517486483509595">Compatible</a> with Google App Engine</li> <li><a href="/misc/goto?guid=4959517486568897648">AsyncHTTPBuilder</a> for asynchronous requests</li> <li>Easily extensible API</li> </ul> <pre>import groovyx.net.http.HTTPBuilder import static groovyx.net.http.Method.GET import static groovyx.net.http.ContentType.TEXT def http = new HTTPBuilder( 'http://www.google.com/search' ) http.request(GET,TEXT) { req -> uri.path = '/mail/help/tasks/' headers.'User-Agent' = 'Mozilla/5.0' //请求成功 response.success = { resp, reader -> assert resp.statusLine.statusCode == 200 println "My response handler got response: ${resp.statusLine}" println "Response length: ${resp.headers.'Content-Length'}" System.out << reader // print response stream } //404 response.'404' = { resp -> println 'Not found' } // 401 http.handler.'401' = { resp -> println "Access denied" } //其他错误,不实现则采用缺省的:抛出异常。 http.handler.failure = { resp -> println "Unexpected failure: ${resp.statusLine}" } }</pre> <p>无需过多的讲解,上述的例子已经非常明白地说明了HTTPBuilder的基本使用。尽管如此,对于上例中的内容类型(即request括号中的 TEXT),还是有必要啰嗦几句。HTTPBuilder支持对响应内容的自动解析,解析的方式可在请求中指定,缺省除了TEXT之外,还支持XML、 HTML和JSON。如果在请求中不指定解析方式,那么它会根据响应的内容类型选择最合适的方式进行解析。对于每一种内容类型:</p> <ul> <li>TEXT,纯文本</li> <li>XML,采用XmlSlurper解析内容</li> <li>HTML,先采用NekoHTML使HTML 规范化,之后采用XmlSlurper解析DOM</li> <li>JSON,采用JSON-lib解析内容</li> </ul> <p><strong>项目主页:</strong><a href="http://www.open-open.com/lib/view/home/1326987740249" target="_blank">http://www.open-open.com/lib/view/home/1326987740249</a></p>