Http Cliennt 4.3教程第五章快速API

4037 ワード


5.1.Easy to use facade API
Http Clientは4.2からファーストアプリをサポートしています.クイックアプリはHttpClientの基本機能だけを実現しています.フレキシブルではない簡単なシーンに使えばいいです.例えば、クイックアプリは、ユーザが接続管理及びリソースリリースを処理する必要がない.
高速アプリを使用したいくつかの例を以下に示します.
    //     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のクイックアプリは、ユーザが接続管理とリソースのリリースを処理する必要がない.しかし、このようにすると、これらの応答メッセージはメモリにキャッシュされなければならない.このような状況を避けるために、Http応答はReponseHandlerを使用することを推奨します.
    Document result = Request.Get("http://somehost/content")
            .execute().handleResponse(new ResponseHandler() {

        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 Cliennt 4.3教程第五章快速API