- 浏览: 182508 次
- 性别:
- 来自: 北京
最新评论
-
u011374223:
获取颜色的方法有两个,07xssfWORKBOOK的需要用这个 ...
apache poi读取excel中的颜色,真是坑爹啊 -
zhangtcb:
读取的颜色和Excel中的不一样啊
apache poi读取excel中的颜色,真是坑爹啊 -
LD_21:
...
log4j日志文件的相对路径 -
xfxlch:
upThx
来,让我们一起画个印章吧 -
xinxinlong:
单元格的style里面有个颜色,如果双击单元格,里面的文字选中 ...
apache poi读取excel中的颜色,真是坑爹啊
没什么特别的,自己封装着用的.
package cpcns.office.client.http; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.HttpResponseException; import org.apache.http.client.ResponseHandler; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.ByteArrayBody; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.InputStreamBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; /** * http模拟器 * * @author lan * */ public class HttpInvoker { private static class Holder { private static HttpInvoker instance = new HttpInvoker(); } private static Log log = LogFactory.getLog(HttpInvoker.class); private HttpClient client;// 客户端 private String host;// 主机地址 private ResponseHandler<String> handler;// 应答处理 private boolean wrap;// 是否进行Agent伪装 private HttpInvoker() { handler = new BasicResponseHandler(); ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(); cm.setMaxTotal(10); client = new DefaultHttpClient(cm); } /** * 获取模拟器实例 * * @return */ public static HttpInvoker getInstance() { return Holder.instance; } /** * 设置基本路径,如http://localhost:8080/report * * @param host */ public HttpInvoker setHost(String host) { if (!host.endsWith("/")) { host += "/"; } this.host = host; return this; } /** * 进行User-Agent伪装 */ public HttpInvoker setWrap(boolean wrap) { this.wrap = wrap; return this; } /** * 使用安全套接字连接 * * @return */ public HttpInvoker setSSL() { try { SSLContext ssc = SSLContext.getInstance("TLS"); ssc.init(null, new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; } } }, new SecureRandom()); SSLSocketFactory ssf = new SSLSocketFactory(ssc); Scheme sch = new Scheme("https", 443, ssf); client.getConnectionManager().getSchemeRegistry().register(sch); } catch (KeyManagementException e) { log.error(e.getMessage(), e); } catch (NoSuchAlgorithmException e) { log.error(e.getMessage(), e); } return this; } /** * 请求地址和host拼接成完整url * * @param action * @return */ private String makeURL(String action) { if (action == null) { action = ""; } if (action.startsWith("/")) { action = action.substring(1); } return (this.host == null ? "" : this.host) + action; } /** * 伪装成FF8 * * @param request */ private void agent(HttpRequestBase request) { request.setHeader( "Accept", "text/html,application/xhtml+xml,application/xml,image/png,image/*;q=0.8,*/*;q=0.5"); request.setHeader("Accept-Language", "zh-cn,zh;q=0.5"); request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0"); request.setHeader("Accept-Encoding", "gzip, deflate"); request.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7"); request.setHeader("Connection", "Keep-Alive"); } /** * 模拟get操作 * * @param action * 请求地址,如果设置了host,则只需要action即可 * @return server返回结果 */ public String get(String action) { HttpResponse response = doGet(action); if (response == null) { return null; } try { return handler.handleResponse(response); } catch (HttpResponseException e) { log.error(e.getMessage(), e); } catch (IOException e) { log.error(e.getMessage(), e); } return null; } /** * 模拟get * * @param action * @return */ private HttpResponse doGet(String action) { HttpGet get = new HttpGet(makeURL(action)); if (wrap) { agent(get); } try { return client.execute(get); } catch (ClientProtocolException e) { log.error(e.getMessage(), e); } catch (IOException e) { log.error(e.getMessage(), e); } return null; } /** * 模拟post操作 * * @param action * 请求地址,如果设置了host,则只需要action即可 * @param params * post的参数,允许为null * @return server返回结果 */ public String post(String action, Map<String, String> params) { List<NameValuePair> pairs = new ArrayList<NameValuePair>(); if (params != null && !params.isEmpty()) { for (Map.Entry<String, String> entry : params.entrySet()) { NameValuePair nvp = new BasicNameValuePair(entry.getKey(), entry.getValue()); pairs.add(nvp); } } try { return doPost(action, new UrlEncodedFormEntity(pairs, HTTP.UTF_8)); } catch (UnsupportedEncodingException e) { log.error(e.getMessage(), e); } return null; } /** * 模拟post * * @param action * @param entity * @return */ private String doPost(String action, HttpEntity entity) { HttpPost post = new HttpPost(makeURL(action)); if (wrap) { agent(post); } try { post.setEntity(entity); return client.execute(post, new BasicResponseHandler()); } catch (ClientProtocolException e) { log.error(e.getMessage(), e); } catch (IOException e) { log.error(e.getMessage(), e); } return null; } /** * 上传文件操作 * * @param action * 请求地址,如果设置了host,则只需要action即可 * @param params * post的参数,允许为null.value只接受String,InputStream,byte[]和File.<b> * InputStream请自行关闭.</b> * @return server返回的结果 */ public String upload(String action, Map<String, Object> params) { MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); Charset utf8 = Charset.forName("UTF-8"); if (params != null && !params.isEmpty()) { for (Map.Entry<String, Object> entry : params.entrySet()) { String name = entry.getKey(); Object value = entry.getValue(); if (value instanceof String) { try { entity.addPart(name, new StringBody((String) value, utf8)); } catch (UnsupportedEncodingException e) { log.error(e.getMessage(), e); } } else if (value instanceof File) { entity.addPart(name, new FileBody((File) value)); } else if (value instanceof InputStream) { entity.addPart(name, new InputStreamBody( (InputStream) value, name)); } else if (value instanceof byte[]) { entity.addPart(name, new ByteArrayBody((byte[]) value, name)); } } } return doPost(action, entity); } /** * 下载文件,文件将保存到系统临时文件夹 * * @param action * get地址 * @param suffix * 文件后缀,为null则默认为".tmp"文件 * @param callback * 下载进度的回调,允许为null * @return 文件或者null */ public File download(String action, String suffix, final DownloadCallback callback) { HttpResponse response = doGet(action); if (response == null) { return null; } HttpEntity entity = response.getEntity(); if (entity == null) { return null; } if (suffix != null && !suffix.startsWith(".")) { suffix = "." + suffix; } File f = null; InputStream is = null; BufferedOutputStream bos = null; try { is = entity.getContent(); f = File.createTempFile(String.valueOf(System.currentTimeMillis()), suffix); final long length = entity.getContentLength(); log.info("开始下载:" + action + ",长度:" + length + " 到文件:" + f.getAbsolutePath()); bos = new BufferedOutputStream(new FileOutputStream(f)); byte[] b = new byte[1024 * 5]; int l = -1; final AtomicLong count = new AtomicLong(0); Thread caller = null; if (callback != null) { caller = new Thread() { @Override public void run() { long last = System.currentTimeMillis(); for (;;) { try { Thread.sleep(callback.interval()); long now = System.currentTimeMillis(); call(count.get(), now - last); last = now; } catch (InterruptedException e) { break; } } call(count.get(), System.currentTimeMillis() - last); } private void call(long count, long gap) { CallbackEvent event = new CallbackEvent(length, count, gap); callback.call(event); } }; caller.start(); } while ((l = is.read(b)) != -1) { bos.write(b, 0, l); count.addAndGet(l); } if (caller != null) { caller.interrupt(); } log.info("下载完毕."); bos.flush(); } catch (IOException e) { log.error(e.getMessage(), e); } finally { try { if (is != null) { is.close(); } } catch (Exception e) { } try { if (bos != null) { bos.close(); } } catch (Exception e) { } } return f; } /** * 断开所有连接 */ public void destroy() { if (client != null) { client.getConnectionManager().shutdown(); } } }
下载回调接口
package cpcns.office.client.http; /** * 下载回调接口 * * @author lan * */ public interface DownloadCallback { /** * 回调方法 * * @param event */ public void call(CallbackEvent event); /** * 回调间隔,单位为毫秒 * * @return */ public int interval(); }
回调事件类
package cpcns.office.client.http; /** * 下载回调事件 * * @author lan * */ public class CallbackEvent { /** * 文件大小,有可能是-1 */ private long total; /** * 当前已获得大小 */ private long current; /** * 距离上次回调的时间间隔,单位为毫秒 */ private long realInterval; public CallbackEvent(long total, long current, long realInterval) { this.total = total; this.current = current; this.realInterval = realInterval; } public long getTotal() { return total; } public long getCurrent() { return current; } public long getRealInterval() { return realInterval; } }
使用的jar包
测试类
package test; import java.awt.HeadlessException; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import cpcns.office.client.http.HttpInvoker; public class Piao { /** * @param args * @throws IOException * @throws HeadlessException */ public static void main(String[] args) throws HeadlessException, IOException { HttpInvoker invoker = HttpInvoker.getInstance(); invoker.setHost("https://dynamic.12306.cn/"); invoker.setWrap(true).setSSL(); File f = invoker.download( "otsweb/passCodeAction.do?rand=lrand&" + Math.random(), "jpg", null); String code = JOptionPane .showInputDialog(new ImageIcon(ImageIO.read(f))); System.out.println(code); Map<String, String> params = new HashMap<String, String>(); params.put("loginUser.user_name", "name"); params.put("user.password", "123456"); params.put("randCode", code); String result = invoker.post("otsweb/loginAction.do?method=login", params); System.out.println(result); // invoker.destroy(); } }
发表评论
-
公约数,公倍数和素数的简单计算
2012-04-01 16:08 1324为自己留作备份,省得用到的时候再去寻找 简单的计算最大公约数 ... -
java简单打印
2012-03-08 09:56 1232没什么,就是一个简单的打印,留作存档 publi ... -
h2的baseDir
2011-11-11 16:38 1462使用h2 1.3.161.在web项目中.计划在Listene ... -
eclipse下自动打包项目并部署到web项目的lib下
2011-10-18 15:59 5116修改web项目的.settings下的org.eclipse. ... -
获取汉字的五笔,全拼和双拼的工具类
2011-10-10 15:51 2381如题,项目需要,首先可用的自然是pinyin4j. 在不考虑 ... -
五笔86和汉字对照表
2011-10-09 16:53 2528项目要用到汉字转拼音和五笔,拼音容易,使用pinyin4j. ... -
java System属性
2011-09-19 10:14 1385自定义 : java -Dname=value S ... -
log4j日志文件的相对路径
2011-09-01 10:51 6812一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇 ... -
Apache codec中的base64
2011-07-20 09:46 2283一直使用sun的base64,但是感觉不是很好,毕竟不是标准包 ... -
来,让我们一起画个印章吧
2011-07-04 14:52 4510这几天发现有哥们在介 ... -
svg中的arc转化为java中的arc
2011-05-27 15:31 2675最近项目需要解析svg中的path.直线和贝塞尔曲线都好办,唯 ... -
swing的拖拽(dnd)的简单实现
2011-03-28 10:18 2006这几天项目需要用到dnd,API比较麻烦.在网上找了很多,都只 ... -
自用的MD5计算工具
2011-03-11 15:45 1780/** * 检查输入流的MD5值是否符合.如果MD5为 ... -
用jsoup分析下载巨鲸的mp3
2011-02-25 15:37 1722这两天突然想听听杰克逊的歌.首选当然是巨鲸. 支持正版. ... -
获取子类的泛型参数
2011-01-27 16:03 1354用的时候不好找,今天看nutz的dao的源码看到了,摘出来备份 ... -
简单的通过注解运行的dao
2011-01-26 11:47 1787项目是个老项目,是个比较简单,但是编码比较凌乱的项目.数据库字 ... -
java模拟js的escape和unescape函数
2011-01-05 10:43 3467这个是在网上找的代码,然后修改了下.作用标题已经很明显了. ... -
自己写的多线程对象池
2010-12-10 16:53 1319/** * 排版器的一个公用接口 <br> ... -
apache poi读取excel中的颜色,真是坑爹啊
2010-12-01 16:23 16964工作原因,需要使用poi来读取excel中的所有内容. 其他 ... -
查找项目中实现接口的所有类
2010-11-15 13:45 5886最近为项目写了一个公式执行功能,其中函数太多,只能写了一个接口 ...
相关推荐
在这个“httpclient4 封装”中,我们将探讨HttpClient 4.2版本的使用,以及如何将它封装到自己的项目中。 HttpClient 4.2是Apache HttpClient系列的一个稳定版本,它支持HTTP/1.1和部分HTTP/2协议,提供了对HTTPS、...
HttpClient 4.3封装工具类支持配置HTTP代理或SOCKS代理,包括设置代理的主机名、端口号,以及代理认证等。这样,即使在需要代理的网络环境中,也能正常发起HTTP请求。 2. **多线程问题**:在处理大量并发请求时,...
4. **执行请求**:调用HttpClient的`execute`方法发送请求。 5. **处理响应**:获取响应状态码、响应体、头部信息等,并进行错误检查。 6. **关闭资源**:确保在完成请求后关闭连接,避免资源泄露。 在封装过程中,...
基于Apache HttpClient 4.5.2 封装的工具类 HttpUtil 可用于爬虫和模拟登陆。使用新的语法后比3.*版本的速度感觉有提升。使用后注意资源的释放 pom 部分,应该不全,需要用的根据代码的import去找maven资源即可。 ...
标题中的“对于C#(HttpClient)方式网络请求的封装”是指使用C#编程语言,特别是通过HttpClient类来处理HTTP网络请求,并将这个过程进行抽象和封装,以便在多个地方重复使用。HttpClient是.NET Framework和.NET ...
4. **线程安全**:HttpClient 4.3不是线程安全的,所以在多线程环境中,通常每个线程都应有自己的HttpClient实例或使用连接池来管理。 5. **性能优化**: - **连接池**:通过配置连接池大小,可以提高并发性能,...
本篇文章将深入探讨重新封装的HttpClient类,以及如何利用它进行高效且灵活的网络请求。 首先,我们来看一下`HttpClient`类的基本用法。原生的`HttpClient`类提供了发送GET、POST等不同HTTP方法请求的能力。例如,...
本篇文章将详细讲解基于HttpClient的简化封装Starget.Http,以及如何利用它更方便地调用WebAPI接口,并通过Attribute控制模型序列化的位置。 首先,HttpClient虽然强大且功能齐全,但其基础使用往往需要编写大量的...
在Spring框架中,我们可以将HttpClient进行封装,以便更好地利用其功能并整合到Spring的应用上下文中。下面将详细介绍如何使用Spring与HttpClient结合实现Http和Https请求。 1. **HttpClient介绍** HttpClient是一...
封装了httpclient的get请求和post请求,包括传参数和和不传参数,以及请求头信息的设定。
自己对HttpClient的简单封装,目前只封装了post方式的请求
【HttpClient工具类封装】 在Java开发中,Apache HttpClient是一个强大的HTTP客户端库,常用于执行HTTP请求,如GET、POST、PUT和DELETE等。这个工具类是基于HttpClient 4.5.12版本进行封装,目的是简化HTTP操作并...
### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的客户端HTTP组件,它不仅支持HTTP协议,还能处理HTTPS请求,并提供了...
在这个场景中,我们关注的是如何使用 HTTPClient 发送一个 JSON 格式的 POST 请求并封装表单数据。下面将详细介绍这个过程。 首先,我们需要创建一个 `HttpPost` 对象,并指定目标 URL。在给出的代码中,`url` 参数...
HttpClient4可以通过HttpPost类实现这一操作,将这些数据封装成NameValuePair或HttpEntity对象,然后添加到请求中。 博客中可能还会讨论HttpClient4的一些高级特性,如重试策略、连接池管理和超时设置。HttpClient4...
首先,HttpClient的封装通常包括以下几个核心功能: 1. **初始化设置**:创建HttpClient对象时,可能需要设置基础URL、超时时间、重试次数等参数。 2. **HTTP方法支持**:包括GET、POST、PUT、DELETE等多种HTTP请求...
通过这个简单的封装,JavaEyeClient 使得开发者在使用 HttpClient 进行网络请求时,可以避免很多底层的细节,更专注于业务逻辑,提高了开发效率和代码的可读性。如果你对具体的使用方法感兴趣,可以参考提供的博文...
HttpClientHelper 对这个类进行了封装,使得开发者无需直接与HttpClient接口打交道,而是通过更简洁、易用的方法调用来实现网络通信。这提高了代码的可读性和可维护性。 单例模式是软件设计模式的一种,确保一个类...
封装了一些采用HttpClient发送HTTP请求的方法;httpPOST2方法HttpUtil.post(url, params)需引入jar <dependency> <groupId>...
这篇最新的文章“HttpClient4模拟登录腾讯微博”探讨了如何利用HttpClient4实现对腾讯微博的模拟登录,这在自动化测试、数据抓取等场景中非常实用。 HttpClient4库提供了丰富的API,可以定制化地构造HTTP请求,包括...