- 浏览: 135301 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 889把jre里的msvcr71.dll文件拷贝到C:\window ... -
Properties类小结
2010-09-06 16:20 865目前有个任务,要用到java.util.Properties类 ... -
lucene 创建索引
2010-09-01 14:48 1058@Retention(RetentionPolicy.RU ... -
反射工具类
2010-09-01 11:22 1477import java.lang.reflect.Fie ... -
url参数和map之间的转换
2010-09-01 11:10 9226/** * 将url参数转换成map * @ ... -
使用jackson解析json数据时获取多级节点的值,递归实现
2010-09-01 11:08 5896/** * 解析jsonNode的值 * @ ... -
将javabean转换成Map
2010-09-01 11:06 1797public static Map<String, ... -
httpclient4 ThreadSafeClientConnManager 多线程程执行HTTP请求的例子
2010-08-27 13:49 7271package cn.lake.util; import ... -
CalendarUtil
2010-08-19 15:35 979package com.test; import ... -
java 中对象属性和数据库中字段名的转换
2010-08-18 18:18 5461在开发过程中数据中的字段的命名一般是这样的:user_name ... -
使用HttpClient4 和jsoup下载Google 1998年到2010年的logo(原创)
2010-08-14 21:52 1165我个人比较喜欢Google的logo,感觉设计的很好,以前都是 ... -
GoogleLogoUtil
2010-08-13 13:05 790package com.test; import ... -
HttpClient4 实现文件下载
2010-08-12 18:19 3067HttpClient4 实现文件下载,依赖commons-io ... -
java httpClient4.0 通过代理认证访问网站
2010-08-11 10:09 2932httpClient4.0 通过代理认证访问网站 imp ... -
java 生成32位UUID
2010-07-27 18:53 2567java 生成32位UUID,需要apache的2个jar(c ... -
java bean反射 获取get set方法(Method)
2010-07-27 18:44 9437/** * java反射bean的get方法 ... -
java 半角与全角转换
2010-07-27 18:41 935/** * 半角转全角 * ... -
使用jackson解析json数据
2010-07-27 14:15 3091import java.util.Iterator; ... -
java高清新处理图片
2010-07-13 09:51 2512在项目中需要对图片处理(缩小、加水印),一开始用的程序虽然可以 ... -
java人民币小写转换大写
2010-07-13 09:47 1645/** * <p>Title: Money& ...
相关推荐
- 使用Apache HttpClient可以通过`PostMethod`类来构造表单数据,并发送POST请求到指定的URL。 4. **自定义HTTP方法**: - 为了满足特定的需求,有时需要对Apache HttpClient中的默认方法进行扩展或修改。 - 本...
我们可以读取状态码判断请求是否成功,解析响应头获取相关信息,使用`EntityUtils`类读取响应体内容。 6. **错误处理**:HttpClient提供了异常处理机制,如`IOException`和`HttpException`,需要适当地捕获和处理。...
在IT行业中,网络数据抓取是一项常见的任务,用于获取网页上的信息、分析市场趋势或进行自动化测试。HttpClient是Apache软件基金会开发的一个Java库,专门用于发起HTTP请求并处理响应,是进行网页抓取的重要工具。本...
### HttpClient入门介绍与实例...通过这段代码,我们可以看到`HttpClient`的使用流程,包括实例化、方法创建、执行、结果检查、数据获取以及连接释放等关键步骤。这对于初学者理解和掌握`HttpClient`的使用至关重要。
- commons-codec-1.6.jar:提供了各种编码解码工具,包括URL编码、Base64编码等,是HttpClient依赖的基础库。 - commons-logging-1.1.1.jar:提供日志记录服务,允许HttpClient使用多种日志实现。 - ...
`commons-codec-1.4.jar`则是Apache Commons Codec库,它提供了一系列编码解码的工具,包括Base64编码、URL编码等,HttpClient在处理请求参数或响应数据时可能会用到这些工具。 在实际使用HttpClient时,我们通常会...
JAVA技术的网页内容智能抓取 基于JAVA技术的网页内容智能抓取架构完全基于JAVA技术核心技术XML解析、HTML解析、开源组件应用。应用的开源组件包括DOM4J、jericho-html-2.5、commons-httpclient等。 1. XML解析技术...
响应中包含了登录后的网页内容,可以通过HttpWebResponse或HttpResponseMessage对象获取。 5. **处理登录结果**:根据返回的响应,判断登录是否成功。这通常通过检查响应状态码(如200表示成功)、分析响应内容...
因此,在本例中,我们使用了正则表达式来分析获取到的HTML源码,并从中提取出字符集声明部分,以判断网页实际采用的编码格式。如果发现网页声明的编码格式为“utf-8”,则使用UTF-8编码方式重新转换字节数组为字符串...
例如,可能需要提供城市编码来获取特定地区的天气信息。 3. **数据解析**:获取到的天气数据通常是JSON或XML格式,需要将这些数据解析成可操作的对象。可以使用如`json`库(Python)或`Gson`(Java)进行解析。 4....
如`isCreateFile()`用于判断是否应创建文件保存网页内容,`getGoalContent()`用于从网页内容中提取目标内容,`isHasGoalContent()`检测网页内容是否包含目标内容,以及将URL规范化等。 3. **HrefOfPage.java**:这...
本资源提供的"java模拟淘宝登录源码"是基于HTTPClient库实现的,它可以帮助开发者理解如何通过编程方式与Web服务进行交互,尤其是涉及到身份验证的场景。淘宝作为中国最大的电商平台之一,其登录流程涉及到了各种...
`FunctionUtils`是一个工具类,包含了多种静态方法,比如页面链接的正则表达式匹配、获取URL链接的元素、判断是否创建文件、规范化URL以及从网页内容中提取目标内容。这些方法对处理爬取的数据非常有用,可以进行...
`EntityUtils`提供了一系列方法来处理响应实体,如读取内容、判断状态等。此外,还可以使用`HttpEntityEnclosingRequestBase`处理需要携带实体的请求。 5. **性能优化**: HttpClient 4.5.3在性能上进行了优化,...
Httpcore4.4中的HttpEntity接口定义了处理HTTP消息实体的方法,如获取内容长度、读取内容、判断是否可重复等。正确导入Httpcore4.4的jar包,即可解决此类问题。 而Httpclient是基于Httpcore构建的,提供了一个功能...
|--Activity不允许横竖屏切换 |--Activity常用小技巧 ...|--获取网页的源码 |--读取外部资源的文件3种方式 |--读取手机内的短信 |--通信之Application实现应用全局通信 |--重启adb |--隐式转换 页面 |--震动效果的实现
// 获取响应内容 var responseContent = await response.Content.ReadAsStringAsync(); return responseContent; } ``` 4. 活体检测与眼部状态识别:科大讯飞的API不仅能检测人脸位置,还能进行活体检测,判断...
例如,通过`getBatteryLevel()`方法可以获取当前电池百分比,`isCharging()`则可以判断设备是否正在充电。此外,`BatteryManager.BATTERY_PROPERTY_*`常量可以用来获取其他详细电池属性,如温度、电流等。 其次,...
在Java编程语言中,获取手机验证码通常涉及到网络通信、安全编码和第三方服务的集成。这里我们将深入探讨这个过程,以及如何使用Java实现这一功能。 首先,我们要理解验证码的主要作用是验证用户身份,防止机器人或...
添加内容到文件结尾;文件的分割和合并;使用StreamTokenizer统计文件的字符数; 序列化和反序列化对象(将不长用的对象暂时持久化到文件中为对象的序列化,反之用时再把对象恢复到内存为反序列化); 控制对象的...