集册 Java实例教程 HTTP client fluent API可用于处理HTTP响应,而无需缓冲内存中的内容体apachehttp client

HTTP client fluent API可用于处理HTTP响应,而无需缓冲内存中的内容体apachehttp client

欢马劈雪     最近更新时间:2020-01-02 10:19:05

531
HttpClient流利的API可用于处理HTTP响应,而无需在内存中缓冲内容主体apache http client

/*

 * --------------------------------------------------------------------

 * Licensed to the Apache Software Foundation (ASF) under one

 * or more contributor license agreements.  See the NOTICE file

 * distributed with this work for additional information

 * regarding copyright ownership.  The ASF licenses this file

 * to you under the Apache License, Version 2.0 (the

 * "License"); you may not use this file except in compliance

 * with the License.  You may obtain a copy of the License at

 *

 *   http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing,

 * software distributed under the License is distributed on an

 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

 * KIND, either express or implied.  See the License for the

 * specific language governing permissions and limitations

 * under the License.

 * --------------------------------------------------------------------

 *

 * This software consists of voluntary contributions made by many

 * individuals on behalf of the Apache Software Foundation.  For more

 * information on the Apache Software Foundation, please see

 * <http://www.apache.org/>.

 *

 *//**n o w j a v a . c o m - 时代Java**/

package org.apache.http.client.fluent;


import java.io.IOException;

import java.nio.charset.Charset;


import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;


import org.apache.http.Consts;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;/* 来自 时 代 J a v a - nowjava.com*/

import org.apache.http.StatusLine;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpResponseException;

import org.apache.http.client.ResponseHandler;

import org.apache.http.entity.ContentType;

import org.w3c.dom.Document;

import org.xml.sax.SAXException;


/**

 * This example demonstrates how the HttpClient fluent API can be used to handle HTTP responses

 * without buffering content body in memory.

 */

public class FluentResponseHandling {


    public static void main(String[] args) throws Exception {

        Document result = Request.Get("http://somehost/content").execute()

                .handleResponse(new ResponseHandler<Document>() {


                    @Override

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

                            }

                            Charset charset = contentType.getCharset();

                            if (charset == null) {

                    
展开阅读全文