首页 > 学院 > 开发设计 > 正文

HttpClient4.3使用经验(一)简单使用

2019-11-14 15:02:24
字体:
来源:转载
供稿:网友
package com.wp.nevel.base.utils;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.SocketException;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Map.Entry;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.ClientPRotocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.utils.URLEncodedUtils;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.protocol.HttpContext;import org.apache.http.util.EntityUtils;import org.apache.log4j.Logger;import org.junit.Test;import com.wp.nevel.base.exception.ParserException;import com.wp.nevel.base.service.impl.LogServiceHelp;public class HttpClientUtils  {    public static  Logger logger = Logger.getLogger( LogServiceHelp.class);        private static HttpClient httpclient;    static {        httpclient = HttpClients.createDefault();    }        @Test    public void test(){        String url="http://www.shuchongw.com/files/article/html/23/23114/index.html";        doGetHtmlContent2byte(url);    }                /**     * 根据简单url获取网页数据,转换成byte [] 存储     * */    public static byte[] doGetHtmlContent2byte(String url) {        CloseableHttpResponse response = null;        byte[] resultByte = {};        try {            HttpGet get = new HttpGet(url);            System.out.println(url);            RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(30000).setConnectTimeout(30000).build();            get.setConfig(requestConfig);            try {                response = (CloseableHttpResponse) HttpClientUtils.httpclient.execute(get);            } catch (UnknownHostException e) {                e.printStackTrace();                    logger.info("链接主网失败");            }            int statusCode = response.getStatusLine().getStatusCode();            System.out.println(statusCode);            if (statusCode == 200) {                HttpEntity entity = response.getEntity();                resultByte = EntityUtils.toByteArray(entity);            }        } catch (ClientProtocolException e) {            e.printStackTrace();        } catch (SocketException e) {            e.printStackTrace();        }catch(IOException e){            e.printStackTrace();        } finally {            try {                if(response!=null){                    response.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }        return resultByte;    }        /**     * 根据复杂url获取网页数据,转换成byte [] 存储     * @throws ParserException      * @throws IOException      * @throws UnknownHostException      * @throws ClientProtocolException      * @throws SocketException      * */    public static byte [] doGetHtmlByParams2Byte(Map<String, String> params, String paramsEncoding, String url)  {        if (params != null) {            List<NameValuePair> formparams = new ArrayList<NameValuePair>();            for (Entry<String, String> entry : params.entrySet()) {                formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));            }            if (!formparams.isEmpty()) {                String paramsStr = URLEncodedUtils.format(formparams, paramsEncoding!=null?paramsEncoding:"utf-8");                url = url + "?" + paramsStr;            }        }        return doGetHtmlContent2byte(url);    }        /**     * 根据复杂url获取网页数据,转换成String 存储     * @throws ParserException      * @throws IOException      * @throws UnknownHostException      * @throws ClientProtocolException      * @throws SocketException      * */    public static String doGetHtmlByParams2Text(Map<String, String> params, String paramsEncoding, String url,String htmlEncoding) throws  ClientProtocolException, UnknownHostException, SocketException{        try {            return getHtmlContentByText(doGetHtmlByParams2Byte(params,paramsEncoding,url),htmlEncoding!=null?htmlEncoding:"utf-8");        } catch (Exception e) {            e.printStackTrace();            return "";        }    }        /**     * 根据简单url获取网页数据,转换成String 存储     * @throws ParserException      * @throws IOException      * @throws UnknownHostException      * @throws ClientProtocolException      * @throws SocketException      * */    public static String doGetHtmlContentToString(String url, String encoding){        try {            return getHtmlContentByText(doGetHtmlContent2byte(url),encoding);        } catch (Exception e) {            e.printStackTrace();            return "";        }    }    /**     * 根据简单url获取网页图片数据, 保存路径[saveImagePath]     * @throws ParserException      * @throws IOException      * @throws UnknownHostException      * @throws ClientProtocolException      * @throws SocketException      * */    public static  void getHtml2Image(String url,String saveImagPath){        try {            downloadData(doGetHtmlContent2byte(url),saveImagPath);        } catch (Exception e) {            e.printStackTrace();        }    }        public static  String getHtmlContentByText(byte [] htmlBytes, String encoding){        try {            return new String (htmlBytes,encoding!=null?encoding:"utf-8");        } catch (UnsupportedEncodingException e) {            e.printStackTrace();            return  "";        }    }            /**     * 执行下载io     *      * @param byte [] data 网页字节流,filename 存储地址和文件名 return     * */    public static void downloadData(byte[] data, String filename) {        try {            DataOutputStream writer = new DataOutputStream(                    new FileOutputStream(new File(filename)));            BufferedOutputStream out = new BufferedOutputStream(writer);            out.write(data);            out.flush();            out.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }        public static String readFile(String filename) throws IOException{        String xmlContent =null;        File file = new File(filename);        BufferedReader reader =null;        try {            if(!file.exists()){                 new RuntimeException("文件不存在");                 return xmlContent;            }            StringBuilder buider = new StringBuilder();            String readata ="";            reader = new BufferedReader(new FileReader(file));            while(true){                readata = reader.readLine();                if(readata==null){                    break;                }                buider.append(readata).append("/n");            }            xmlContent=buider.toString();        } catch (FileNotFoundException e) {            e.printStackTrace();        }finally{            if(reader!=null)                reader.close();        }        return xmlContent;    }        public static byte []  doGetByteByHttpclient2Url(HttpContext httpContext,CloseableHttpClient client,String url){        byte [] resultBytes = null;        try {            HttpGet get = new HttpGet(url);            CloseableHttpResponse response =client.execute(get, httpContext);            int status = response.getStatusLine().getStatusCode();            System.out.println("链接状态="+status);            if(status!=200)                return resultBytes;            HttpEntity entity = response.getEntity();            resultBytes = EntityUtils.toByteArray(entity);        } catch (ClientProtocolException e) {            throw new RuntimeException("失败连接地址"+url, e);        } catch (IOException e) {            throw new RuntimeException("失败连接地址"+url, e);        }        if(resultBytes==null){            try {                Thread.sleep(2000);            } catch (InterruptedException e) {                e.printStackTrace();            }        }        return resultBytes;    }    }

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表