HttpClient4.3 使用经验(一) 简单使用
2015-11-20 12:01
555 查看
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; } }
相关文章推荐
- iOS面试题 网络请求(一)
- iOS面试题 网络请求(一)
- 网络数据请求实践一:android-async-http实现下载和上传
- IP网络5种基本寻址方式 (单播、多播、广播、任播、地域多播)
- 55、Android网络图片 加载缓存处理库的使用
- 第二章 传输层:TCP、UDP和SCTP(3)—端口号
- HTTP Status 405 - Request method 'POST' not supported (Spring MVC)
- iOS 利用AFnetworking判断网络状态
- [C++] Windows下的socket编程(这是一个简单的TCP/IP例子)
- 11.20 python - Google Cloud Messaging (GCM) HTTP connection server.
- 第二章 传输层:TCP、UDP和SCTP(2)—TCP连接的建立和终止
- VMWare网络设置的3中方式
- TFO (tcp fast open) 简介
- SimpleHTTPServer功能
- UIWebView加载https网页
- 简单unix 局域网的TCP会话
- tomcat8配置https双向认证
- 【HDU4560 2013西山居复赛D】【二分答案+网络流拆点】我是歌手 安排演唱会_每人歌不同_每场歌不同_人歌匹配一次
- Unix网络编程——简介
- TCP长连接与短连接