`

HttpClient4.5.2 快速API

阅读更多

原文链接:http://www.yeetrack.com/?p=832

 

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);
        }
    }
});

 

 

分享到:
评论

相关推荐

    httpclient-4.5.2-API文档-中文版.zip

    赠送原API文档:httpclient-4.5.2-javadoc.jar; 赠送源代码:httpclient-4.5.2-sources.jar; 包含翻译后的API文档:httpclient-4.5.2-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache....

    httpclient-4.5.2-API文档-中英对照版.zip

    赠送原API文档:httpclient-4.5.2-javadoc.jar; 赠送源代码:httpclient-4.5.2-sources.jar; 包含翻译后的API文档:httpclient-4.5.2-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org....

    httpClient接口开发所需jar包

    httpClient接口开发所需jar包,包含httpclient-4.5.2.jar,httpcore-4.4.4.jar,httpcore-4.4.4.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-logging-api-1.1.jar,xfire-all-1.2.6.jar,...

    tomcatmanager.jar

    使用httpclient 4.5.2开发的包,只有一个功能,带凭据方式发送http请求,调用格式:java -jar tomcatmanager.jar ip username password 例如在卸载部署在tomcat的项目时候调用tomcatmanager api时候的例子: java...

    dbeaver-driver-all-master.zip

    httpclient-4.5.2.jar httpcore-4.4.4.jar httpmime-4.5.2.jar jackson-annotations-2.7.0.jar jackson-core-2.7.3.jar jackson-databind-2.7.3.jar jaxb-api-2.3.0.jar lz4-1.3.0.jar slf4j-api-1.7.21.jar csvjdbc...

    hadoop-2.10.0jar.zip

    httpclient-4.5.2.jar httpcore-4.4.4.jar jackson-core-asl-1.9.13.jar jackson-jaxrs-1.9.13.jar jackson-mapper-asl-1.9.13.jar jackson-xc-1.9.13.jar java-xmlbuilder-0.4.jar jaxb-api-2.2.2.jar jaxb-impl-...

    AXIS2实现webservice jar包

    httpclient-4.5.2.jar httpcore-4.4.4.jar jaxb-api-2.2.6.jar jaxb-impl-2.2.6.jar jaxb-xjc-2.2.6.jar jaxen-1.1.6.jar jaxws-tools-2.2.6.jar jettison-1.3.jar jibx-bind-1.2.jar jibx-run-1.2.jar jsr311-api-...

    httpcomponents-client-4.5.4-src.zip

    httpcomponents-client-...HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。 MD5:d6031d0f7f1b628978f5c75f6dc73589 大小:1.59 MB

    elasticsearch-5.1.1客户端JAVA开发需要的52个jar包

    commons-codec-1.10.jar,commons-logging-1.1.3.jar,compiler-0.9.3.jar,elasticsearch-5.1.1.jar,HdrHistogram-2.1.6.jar,hppc-0.7.1.jar,httpasyncclient-4.1.2.jar,httpclient-4.5.2.jar,httpcore-4.4.5.jar,...

    elasticsearch-5.2.2客户端JAVA开发需要的69个jar包

    analysis-pinyin-5.2.2.jar,guava-16.0.1.jar,HdrHistogram-2.1.6.jar,hppc-0.7.1.jar,httpasyncclient-4.1.2.jar,httpclient-4.5.2.jar,httpcore-4.4.5.jar,httpcore-nio-4.4.5.jar,jackson-core-2.8.6.jar,jackson...

    开涛高可用高并发-亿级流量核心技术

    12.2.1 HttpClient 4.5.2配置 236 12.2.2 HttpClient连接池源码分析 240 12.2.3 HttpClient 4.2.3配置 241 12.2.4 问题示例 243 12.3 线程池 244 12.3.1 Java线程池 245 12.3.2 Tomcat线程池配置 248 13 异步并发...

    CacheCow:在.NET Core和4.5.2+中为客户端和服务器实现HTTP缓存的实现

    .NET Core和4.52+中针对HttpClient,ASP.NET Web API,ASP.NET MVC Core和的HTTP缓存的实现。 本文档涵盖以下主题: 入门: 注意:版本2.0.0中的重大更改 由于CacheCow的服务器端实现中有很多更改,而客户端的大...

    大型分布式网站架构与实践

     4.5.2 典型案例分析 331  第5章 数据分析 337  本章主要介绍和解决如下问题:  分布式系统中日志收集系统的架构。  如何通过Storm进行实时的流式数据分析。  如何通过Hadoop进行离线数据分析,通过Hive建立...

    Android开发案例驱动教程 配套代码

    4.5.2 图片文本菜单 59 本章小结 60 第5章 UI基础控件 61 5.1 按钮 61 5.1.1 Button 62 5.1.2 ImageButton 63 5.1.3 ToggleButton 64 5.2 TextView 64 5.3 EditText 65 5.4 RadioButton和RadioGroup 66 ...

    OPhone应用开发权威指南(黄晓庆)

    9.3.1 HttpClient API介绍 373 9.3.2 GET方法的使用和限制 378 9.3.3 使用POST方法上传附件 382 9.3.4 从服务器端下载图片 390 9.4 设计C/S通信数据格式 392 9.4.1 对象序列化 396 9.4.2 使用XML传输对象 401 9.5 小...

Global site tag (gtag.js) - Google Analytics