- 浏览: 132816 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xinglianxlxl:
看看,不确定用了吗
url参数和map之间的转换 -
ijlkdwg:
没有看到 jar 包在哪 ?
java获取5日天气预报(json数据) -
BUYAOZAIBEIDAOLE:
查询一下就找到了,拿走试下,谢谢LZ
反射工具类 -
w1106093687:
引用试试什么效果
java bean反射 获取get set方法(Method) -
moxin0703:
哪有Utils包啊?
java获取5日天气预报(json数据)
在“导航189”网站中编写爬虫程序中使用的httpclient 来获取网页内容,但是在获取网页内容时有编码的问题,这里介绍的一个方法是使用EntityUtils中的toString来返回网页的内容,原理是这样的,在请求的返回header中获取编码,如果没有找到返回的编码就使用默认编码来返回,代码实现如下:
调用如下:
EntityUtils 内部实现是这样的:
EntityUtils 中获取编码的方法如下:
/** * 处理GET请求,返回整个页面 * * @param url 访问地址 * @param params 编码参数 * @return * @throws Exception * @throws Exception */ public synchronized String doGet(String url, String... params) throws Exception { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpProtocolParams.setUserAgent(httpclient.getParams(), "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9"); String charset = "UTF-8"; if (null != params && params.length >= 1) { charset = params[0]; } HttpGet httpget = new HttpGet(); String content = ""; httpget.setURI(new java.net.URI(url)); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { //使用EntityUtils的toString方法,传递默认编码,在EntityUtils中的默认编码是ISO-8859-1 content = EntityUtils.toString(entity, charset); httpget.abort(); httpclient.getConnectionManager().shutdown(); } return content; }
调用如下:
//导航189的网站返回编码是GBK,所以传递和不传递编码都能返回正确的数据 doGet("http://www.dh189.com/", "GBK"); doGet("http://www.dh189.com/"); //民生银行的网站在请求后并没有返回编码,所以要设置编码,不设置则是乱码 doGet("http://www.cmbc.com.cn/"); doGet("http://www.cmbc.com.cn/","GBK");
EntityUtils 内部实现是这样的:
/** * Get the entity content as a String, using the provided default character set * if none is found in the entity. * If defaultCharset is null, the default "ISO-8859-1" is used. * * @param entity must not be null * @param defaultCharset character set to be applied if none found in the entity * @return the entity content as a String * @throws ParseException if header elements cannot be parsed * @throws IllegalArgumentException if entity is null or if content length > Integer.MAX_VALUE * @throws IOException if an error occurs reading the input stream */ public static String toString( final HttpEntity entity, final String defaultCharset) throws IOException, ParseException { if (entity == null) { throw new IllegalArgumentException("HTTP entity may not be null"); } InputStream instream = entity.getContent(); if (instream == null) { return ""; } if (entity.getContentLength() > Integer.MAX_VALUE) { throw new IllegalArgumentException("HTTP entity too large to be buffered in memory"); } int i = (int)entity.getContentLength(); if (i < 0) { i = 4096; } //获取请求中的编码 String charset = getContentCharSet(entity); //若没返回编码则使用传递的编码 if (charset == null) { charset = defaultCharset; } if (charset == null) { charset = HTTP.DEFAULT_CONTENT_CHARSET; } Reader reader = new InputStreamReader(instream, charset); CharArrayBuffer buffer = new CharArrayBuffer(i); try { char[] tmp = new char[1024]; int l; while((l = reader.read(tmp)) != -1) { buffer.append(tmp, 0, l); } } finally { reader.close(); } return buffer.toString(); }
EntityUtils 中获取编码的方法如下:
/** * Obtains character set of the entity, if known. * * @param entity must not be null * @return the character set, or null if not found * @throws ParseException if header elements cannot be parsed * @throws IllegalArgumentException if entity is null */ public static String getContentCharSet(final HttpEntity entity) throws ParseException { if (entity == null) { throw new IllegalArgumentException("HTTP entity may not be null"); } String charset = null; if (entity.getContentType() != null) { HeaderElement values[] = entity.getContentType().getElements(); if (values.length > 0) { NameValuePair param = values[0].getParameterByName("charset"); if (param != null) { charset = param.getValue(); } } } return charset; }
发表评论
-
Tomcat 启动不了问题
2010-09-07 16:54 846把jre里的msvcr71.dll文件拷贝到C:\window ... -
Properties类小结
2010-09-06 16:20 825目前有个任务,要用到java.util.Properties类 ... -
lucene 创建索引
2010-09-01 14:48 1022@Retention(RetentionPolicy.RU ... -
反射工具类
2010-09-01 11:22 1430import java.lang.reflect.Fie ... -
url参数和map之间的转换
2010-09-01 11:10 9137/** * 将url参数转换成map * @ ... -
使用jackson解析json数据时获取多级节点的值,递归实现
2010-09-01 11:08 5816/** * 解析jsonNode的值 * @ ... -
将javabean转换成Map
2010-09-01 11:06 1750public static Map<String, ... -
httpclient4 ThreadSafeClientConnManager 多线程程执行HTTP请求的例子
2010-08-27 13:49 7229package cn.lake.util; import ... -
CalendarUtil
2010-08-19 15:35 930package com.test; import ... -
java 中对象属性和数据库中字段名的转换
2010-08-18 18:18 5398在开发过程中数据中的字段的命名一般是这样的:user_name ... -
使用HttpClient4 和jsoup下载Google 1998年到2010年的logo(原创)
2010-08-14 21:52 1123我个人比较喜欢Google的logo,感觉设计的很好,以前都是 ... -
GoogleLogoUtil
2010-08-13 13:05 736package com.test; import ... -
HttpClient4 实现文件下载
2010-08-12 18:19 3013HttpClient4 实现文件下载,依赖commons-io ... -
java httpClient4.0 通过代理认证访问网站
2010-08-11 10:09 2888httpClient4.0 通过代理认证访问网站 imp ... -
java 生成32位UUID
2010-07-27 18:53 2507java 生成32位UUID,需要apache的2个jar(c ... -
java bean反射 获取get set方法(Method)
2010-07-27 18:44 9366/** * java反射bean的get方法 ... -
java 半角与全角转换
2010-07-27 18:41 890/** * 半角转全角 * ... -
使用jackson解析json数据
2010-07-27 14:15 3040import java.util.Iterator; ... -
java高清新处理图片
2010-07-13 09:51 2452在项目中需要对图片处理(缩小、加水印),一开始用的程序虽然可以 ... -
java人民币小写转换大写
2010-07-13 09:47 1606/** * <p>Title: Money& ...
相关推荐
1.6.1发送get请求获取网页内容 HttpClient client = new HttpClient(); //设置代理服务器地址和端口 //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port); //使用GET方法,如果服务器...
Android源码之用HttpClient获取网页技术分享
本例子是一个使用HttpClient和URLConnection获取网页html内容的小例子,获取到的源码不解析直接显示,技术比较简单,需要的朋友可以下载研究一下,项目编码GBK默认编译版本2.3.3
android HttpClient 获取网络图片 实例
httpClient获取json格式的数据,并将数据赋值与自动化测试平台
主要介绍了Java爬虫Jsoup+httpclient获取动态生成的数据的相关资料,需要的朋友可以参考下
使用HttpClient获取网页html源代码获取到的源码不解析直接显示,技术比较简单,需要的朋友可以下载研究一下,项目编码GBK默认编译版本2.3.3。
httpClient和htmlparse获取网页数据使用jar
通过httpclient post去获取,response返回码是302,返回的code放在header的Location中。 请求的时候client_id,response_type,redirect_uri,state拼接在url后面,account和password放在body表单(x-...
通过httpclient获取到JSON数据,展示到ListView通过httpclient获取到JSON数据,展示到ListView
通过httpclient的方式获取返回的文本,也可以访问某些支持http方式访问的接口,返回XML并解析
httpclient获取目标网站内容,get、post方式(可运行),可以通过配置参数、配置连接池实现
本例子是通过httpClient 不断的去电信的网站查询可选手机新号 , 每次查出来的数据保存到map , 到一定数量以后 , 保存在本地文件中 , 测试类可以直接运行.
从网络获取数据和图片,用gson解析并用listview展示
Android例子源码httpclient获取到JSON数据并展示到ListView
通过httpclient获取到JSON数据展示到ListView.zip
HttpClient抓取网页Demo,HttpClient 的入门示例,配合blog文章的附件
NULL 博文链接:https://change-jeans.iteye.com/blog/2222052
本例子是一个使用HttpClient和URLConnection获取网页html内容的小例子,获取到的源码不解析直接显示,技术比较简单,需要的朋友可以下载研究一下,项目编码GBK默认编译版本2.3.3