通过ResponseHandler来处理Http响应

来源:互联网 发布:xp 保存网络用户密码 编辑:程序博客网 时间:2024/06/06 04:55
处理对响应对象处理过程的封装
package com.struts2.demo;import com.struts2.demo.utils.AvailableSettings;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.http.Consts;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.StatusLine;import org.apache.http.client.ResponseHandler;import org.apache.http.client.fluent.Request;import org.apache.http.entity.ContentType;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.io.SAXReader;import java.io.IOException;/** * Handler that encapsulates the process of generating a response object from a HttpResponse. * Created by Frank on 2014/6/9. */public class FluentResponseHandling {    private static final Log logger = LogFactory.getLog(AvailableSettings.LOGNAME_TEST);    public static void main(String[] args) {        try {            Document document = Request.Get("http://www.baidu.com").execute().handleResponse(new ResponseHandler<Document>() {                @Override                public Document handleResponse(HttpResponse response) {                    return getXmlDoc(response);                }            });            System.out.println(document.asXML());        } catch (IOException e) {            logger.error("IOException:" + e.getMessage());        }    }    private static Document getXmlDoc(HttpResponse response) {        StatusLine statusLine = response.getStatusLine();        HttpEntity httpEntity = response.getEntity();        if (statusLine.getStatusCode() >= 300) {            logger.error("HttpResponseException,statusCode:" + statusLine.getStatusCode() + " reasonPhrase:" + statusLine.getReasonPhrase());            return null;        }        if (null == httpEntity) {            logger.error("ClientProtocolException:Response contains no content");            return null;        }        ContentType contentType = ContentType.getOrDefault(httpEntity);        if (!contentType.equals(ContentType.APPLICATION_XML)) {            logger.error("Unexpected content type:" + contentType);            return null;        }        SAXReader saxReader = new SAXReader();        saxReader.setEncoding(Consts.UTF_8.name());        saxReader.setValidation(false);        try {            return saxReader.read(httpEntity.getContent());        } catch (DocumentException | IOException e) {            logger.error("axReader.read exception:" + e.getMessage());            return null;        }    }}
0 0