HttpClient4.3 教程 第五章 快速API

转载 2015年11月20日 16:43:02

5.1.Easy to use facade API

HttpClient从4.2开始支持快速api。快速api仅仅实现了HttpClient的基本功能,它只要用于一些不需要灵活性的简单场景。例如,快速api不需要用户处理连接管理和资源释放。

下面是几个使用快速api的例子:

    // 执行一个get方法,设置超时时间,并且将结果变成字符串
    Request.Get("http://www.yeetrack.com/")
            .connectTimeout(1000)
            .socketTimeout(1000)
            .execute().returnContent().asString();

    // 使用HTTP/1.1,通过'expect-continue' handshake来执行post方法
    // 内容包含一个字符串,并且将结果转化成byte数组
    Request.Post("http://www.yeetrack.com/do-stuff")
        .useExpectContinue()
        .version(HttpVersion.HTTP_1_1)
        .bodyString("Important stuff", ContentType.DEFAULT_TEXT)
        .execute().returnContent().asBytes();

    // 通过代理服务器来执行一个带有特殊header的post请求,post请求中带有form表单,并且将返回结果写入文件
    Request.Post("http://www.yeetrack.com/some-form")
            .addHeader("X-Custom-header", "stuff")
            .viaProxy(new HttpHost("myproxy", 8080))
            .bodyForm(Form.form().add("username", "vip").add("password", "secret").build())
            .execute().saveContent(new File("result.dump"));

如果需要在指定的安全上下文中执行某些请求,我们也可以直接使用Exector,这时候用户的认证信息就会被缓存起来,以便后续的请求使用。

    Executor executor = Executor.newInstance()
            .auth(new HttpHost("somehost"), "username", "password")
            .auth(new HttpHost("myproxy", 8080), "username", "password")
            .authPreemptive(new HttpHost("myproxy", 8080));

    executor.execute(Request.Get("http://somehost/"))
            .returnContent().asString();

    executor.execute(Request.Post("http://somehost/do-stuff")
            .useExpectContinue()
            .bodyString("Important stuff", ContentType.DEFAULT_TEXT))
            .returnContent().asString();

5.1.1.响应处理

一般情况下,HttpClient的快速api不用用户处理连接管理和资源释放。但是,这样的话,就必须在内存中缓存这些响应消息。为了避免这一情况,建议使用使用ResponseHandler来处理Http响应。

    Document result = Request.Get("http://somehost/content")
            .execute().handleResponse(new ResponseHandler<Document>() {

        public Document handleResponse(final HttpResponse response) throws IOException {
            StatusLine statusLine = response.getStatusLine();
            HttpEntity entity = response.getEntity();
            if (statusLine.getStatusCode() >= 300) {
                throw new HttpResponseException(
                        statusLine.getStatusCode(),
                        statusLine.getReasonPhrase());
            }
            if (entity == null) {
                throw new ClientProtocolException("Response contains no content");
            }
            DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
            try {
                DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
                ContentType contentType = ContentType.getOrDefault(entity);
                if (!contentType.equals(ContentType.APPLICATION_XML)) {
                    throw new ClientProtocolException("Unexpected content type:" +
                        contentType);
                }
                String charset = contentType.getCharset();
                if (charset == null) {
                    charset = HTTP.DEFAULT_CONTENT_CHARSET;
                }
                return docBuilder.parse(entity.getContent(), charset);
            } catch (ParserConfigurationException ex) {
                throw new IllegalStateException(ex);
            } catch (SAXException ex) {
                throw new ClientProtocolException("Malformed XML document", ex);
            }
        }

        });

 

易踪网:每天进步一点点

转载请保留链接地址: http://www.yeetrack.com/?p=832

HttpClient4.3 教程 第五章 快速API

5.1.Easy to use facade API HttpClient从4.2开始支持快速api。快速api仅仅实现了HttpClient的基本功能,它只要用于一些不需要灵活性的简单场景。例如,...
  • rocksteadypro
  • rocksteadypro
  • 2018年01月10日 10:19
  • 12

HttpClient4.3 教程 第五章 快速API

5.1.Easy to use facade API HttpClient从4.2开始支持快速api。快速api仅仅实现了HttpClient的基本功能,它只要用于一些不需要灵活性的简单场景。例...
  • twobrushes
  • twobrushes
  • 2014年05月16日 12:33
  • 326

【HttpClient4.5中文教程】【第五章 :流畅风格的API】

【译者:fluent-我把它翻译为流式,facade-应该是使用了外观设计模式。】 5.1.简单 使用 facade API HttpClient 4.2 中 简化了基于流式接口的外观API。流式外观...
  • u011179993
  • u011179993
  • 2016年01月14日 16:49
  • 2807

【一】HttpClient4.3.1简单入门实例

1、先看一下示例代码 [java] view plaincopy public class HttpClientTest {       publ...
  • z69183787
  • z69183787
  • 2015年09月11日 14:27
  • 1091

HttpClient4.3教程(转载)

前言 Http协议应该是互联网中最重要的协议。持续增长的web服务、可联网的家用电器等都在继承并拓展着Http协议,向着浏览器之外的方向发展。 虽然jdk中的java.net包中提供了一些...
  • zhong8732134
  • zhong8732134
  • 2014年11月17日 17:44
  • 325

HttpClient4.3教程 第二章 连接管理

2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大。但是如果我们直接...
  • u012660667
  • u012660667
  • 2015年11月20日 16:38
  • 371

HttpClient4.3教程 第二章 连接管理

2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大。但是如果我们直接...
  • twobrushes
  • twobrushes
  • 2014年05月16日 12:15
  • 911

HttpClient4.3教程 第四章 HTTP认证

HttpClient既支持HTTP标准规范定义的认证模式,又支持一些广泛使用的非标准认证模式,比如NTLM和SPNEGO。 4.1.用户凭证 任何用户认证的过程,都需要一系列的凭证...
  • twobrushes
  • twobrushes
  • 2014年05月16日 12:36
  • 395

HttpClient4.3教程 第二章 连接管理

2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大。但是如果我们直接使用...
  • rocksteadypro
  • rocksteadypro
  • 2018年01月10日 10:12
  • 32

HttpClient4.3教程 第二章 连接管理

2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间。Http连接需要的三次握手开销很大,这一开销对于比较小的http消息来说更大。但是如果我们直接使用...
  • xiaomin1991222
  • xiaomin1991222
  • 2016年03月10日 16:05
  • 34
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HttpClient4.3 教程 第五章 快速API
举报原因:
原因补充:

(最多只允许输入30个字)