• HttpClient4.3 教程 第五章 快速API


    HttpClient4.3 教程 第五章 快速API


    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);
                }
            }
    
            });
    
  • 相关阅读:
    Java扫描二维码进行会议签到思路
    Cognos11中通过URL传参访问动态Report
    MySQL数据复制到其他主机时报错
    ESXI部署OVF模板提示用户已取消操作处理方法
    Esxi 6.0虚拟机迁移Linux遇到网络配置错误
    数据库迁移工具Navicat Premium之OracleToMysql
    Cognos11中Dashboard和HTML页面的简单集成
    Cognos11只需简单几步创建你的Dashboard
    云服务器 ECS Linux Ubuntu 主机修改主机名
    gitlab webhook报500
  • 原文地址:https://www.cnblogs.com/shareshow/p/4785264.html
Copyright © 2020-2023  润新知