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

HttpClient4.3 使用经验(一) 简单使用的更多相关文章

  1. HttpClient中post请求http、https示例

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

  2. Haproxy基础知识 -运维小结

    开源软件负载均衡器 现在常用的三大开源软件负载均衡器分别是Nginx.LVS.Haproxy. 在之前的文章中已经对比了这三个负载均衡软件, 下面根据自己的理解和使用经验, 再简单说下这三个负载均衡软 ...

  3. HttpClient4.5简单使用

    一.HttpClient简介 HttpClient是一个客户端的HTTP通信实现库,它不是一个浏览器.关于HTTP协议,可以搜索相关的资料.它设计的目的是发送与接收HTTP报文.它不会执行嵌入在页面中 ...

  4. dubbo学习过程、使用经验分享及实现原理简单介绍

    一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...

  5. 【Dubbo基础】dubbo学习过程、使用经验分享及实现原理简单介绍

    一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...

  6. jqGrid使用经验分享(一)——jqGrid简单使用、json格式和jsonReader介绍

    广大的读者朋友们大家好,很高兴又可以在博客中和大家分享我的开发经验了. 此次,我准备向大家介绍一个非常好用的jQuery表格插件——jqGrid. 如果您在实际项目中遇到web端表格展示功能的需求,又 ...

  7. hashmap简单实例(个人使用经验)

    一.HashMap<int,String>是错误的:因为int是基本类型,而key和value要求是对象,所以要用Integer而不是int.HashMap<String,Objec ...

  8. httpclient4 模拟访问网页 模拟登录 简单例子

    JAVA后台模拟登录一个网站,获得一定权限后进一步操作. 所用的工具: Apache HttpComponents client 4.3版本 以下为代码: import org.apache.http ...

  9. Redis之个人简单理解

    1.什么是redis? 在过去的几年中,NoSQL数据库一度成为高并发.海量数据存储解决方案的代名词,与之相应的产品也呈现出雨后春笋般的生机.然而在众多产品中能够脱颖而出的却屈指可数,如Redis.M ...

随机推荐

  1. Prime Land

    http://poj.org/problem?id=1365 题意:给定一个数字n的拆分形式,然后让你求解n-1的值: 解析:直接爆搞 // File Name: poj1365.cpp // Aut ...

  2. apache安装php7过程中遇到到段错误

    1.假如apache的配置文件httpd.conf同时加载libphp5.so和libphp7.so 2.如图所示,modules下同时存在libphp5.so/libphp7.so 3.启动apac ...

  3. vijos 1464 NOIP 1997 积木游戏

    背景 1997年全国青少年信息学(计算机)奥林匹克竞赛试题 第二试 描述 积木游戏 SERCOI 最近设计了一种积木游戏.每个游戏者有N块编号依次为1 ,2,…,N的长方体积木.对于每块积木,它的三条 ...

  4. 遇到Class Not registered的COM异常怎么办

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:遇到Class Not registered的COM异常怎么办.

  5. Hyper-V虚拟化--逻辑网络、VM网络、逻辑交换机

    逻辑网络承接物理网卡和VM网卡 可以关联站点.主机组.VLAN.IP子网,配置静态IP地址池(虚机的PA地址从该静态IP地址池获取) 只有当逻辑网络中的网络站点关联了VLAN后,在VM中才可以选择VL ...

  6. mysql 服务器ip连接统计

    有的时候数据库服务器连接数过大,也没有慢sql,想知道哪些应用服务器连接上来的比较多,下面的命令轻松搞定 netstat -tnp|grep ESTABLISHED|awk '{ print $5 } ...

  7. windows下载安装MariaDB5.5.32 绿色版

    1.下载地址: http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/mariadb-5.5.32/win32-packages/mariadb-5.5.32 ...

  8. 深入理解Linux操作系统守护进程的意义

    Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的.守护进程 ...

  9. Android开发之玩转FlexboxLayout布局

    在这之前,我曾认真的研究过鸿洋大神的Android 自定义ViewGroup 实战篇 -> 实现FlowLayout,按照大神的思路写出了一个流式布局,所有的东西都是难者不会会者不难,当自己能自 ...

  10. CentOS7安装小小输入法

    添加epel源 $ sudo yum install epel-release 安装centos7缺失依赖包 libwayland-client $ sudo rpm -Uvh ftp://ftp.p ...