`
DAOException
  • 浏览: 120963 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

自己倒腾的一个小的HTTP小工具

    博客分类:
  • java
阅读更多

        说是小工具,其实就是个简单的HTTP请求工具,通过url来获取网页源代码的,以前一直用httpclient的,后来无聊就自己用socket重新写了一个,实现了一些简单的额功能,暂时提供post和get方法,具有cookies记忆功能,支持常用的http1.0和1.1的协议。解码方式暂时只做了gzip的解码,可以自动识别网页字符格式,省去中文乱码的烦恼了。

        因为刚刚完成,基本来说还是有很多bug,把小成果发出来,欢迎拍砖啊,如果有对tcp和http或者socket比较感兴趣的哥们,可以私信我啊,大家一起交流交流。

        小组建见附件:

        使用示例如下所示:

 

	public static void main(String[] args) throws NumberFormatException, UnknownHostException, IOException, FPHttpException{
		// FPRequest是封装http的请求信息的
		FPRequest request = new FPRequest("http://news.qq.com");
		// FPHttpclient是HTTP具体请求和接收的对象
		FPHttpclient client = new FPHttpclient();
		// FPResponse是返回的结果集信息
		FPResponse response  = 	client.req(request); 
		// 打印HTTP源代码
		System.out.println(response.getStream());
	}

     运行一下就可以看到QQ新闻的页面结果了。

 

 

-------------------------------------------------------------------------------华丽的分割线----------------------------------------------------------------------------------

 

    后来有朋友问我,HTTP1.0和1.1的区别有哪些,我想了想,罗列了一些我日常工作当中接触到的,当然不是很全啊,大家可以补充。

    a: 1.0使用短连接,而1.1针对同一站点使用长连接,在我们程序当中有个地方接触的比较明显,http1.1大多使用Content-length和chunked方式去接收网页源代码,而1.0的时候我们更多的是读取到-1的时候认定网页接收完毕,-1其实也就是个一个连接结束标记。1.1当中也可以通过请求头/响应头当中设置存活时间。

    b: 1.1增加了许多http头,最明显的就是host,host属性可以解决最大的一个问题是,我们可以在一个ip下部署多个不同域名的网站。
    c:  1.0以前是一次只能处理一个web请求,而1.1一次可以并发的处理多个连接,不过这里 有个限制,一般情况下一个域名下最多只会同时建立两条连接进行并发处理。

    d: 1.1增加了身份验证机制。

    e: 1.1支持断点续传,有个range属性,用来告诉服务器本次是希望从指定位置开始接收文件。

 

   欢迎大家继续补充。

分享到:
评论
19 楼 wxq594808632 2013-02-21  
DAOException 写道
wxq594808632 写道
hzprogram 写道
shabolalala 写道
不知楼主是如何自动识别网页的字符编码的,有些网页的meta里面没有charset这个属性,所以在获取网页源码时会得到乱码,请楼主指点。

问题同上!

先获取http header中的编码,处理流的时候,如果header中的编码为空,使用JChardet识别编码,如果http header中的编码为空,使用识别出来的编码,如果识别出来的编码也为空,那么获取网页中声明的编码,如果网页中声明的编码也找不到,因为大多数抓取的都是中文网页,默认GB18030,最后把流用最后的编码处理.

其实最准确的方法是你对数据进行二进制转化,可以按照编码规则进行识别,只不过这种方法操作相对比较复杂。

不要夸夸其谈好吗?使用JChardet识别编码就是对数据进行二进制爪花,然后按照编码规则识别,但是识别成本很高,如果识别的数据太短,有可能会误判,所以几种方式结合起来,根据自己的场景来选择然后调整是最好的办法.
18 楼 DAOException 2013-02-21  
wxq594808632 写道
hzprogram 写道
shabolalala 写道
不知楼主是如何自动识别网页的字符编码的,有些网页的meta里面没有charset这个属性,所以在获取网页源码时会得到乱码,请楼主指点。

问题同上!

先获取http header中的编码,处理流的时候,如果header中的编码为空,使用JChardet识别编码,如果http header中的编码为空,使用识别出来的编码,如果识别出来的编码也为空,那么获取网页中声明的编码,如果网页中声明的编码也找不到,因为大多数抓取的都是中文网页,默认GB18030,最后把流用最后的编码处理.

其实最准确的方法是你对数据进行二进制转化,可以按照编码规则进行识别,只不过这种方法操作相对比较复杂。
17 楼 wxq594808632 2013-02-17  
hzprogram 写道
shabolalala 写道
不知楼主是如何自动识别网页的字符编码的,有些网页的meta里面没有charset这个属性,所以在获取网页源码时会得到乱码,请楼主指点。

问题同上!

先获取http header中的编码,处理流的时候,如果header中的编码为空,使用JChardet识别编码,如果http header中的编码为空,使用识别出来的编码,如果识别出来的编码也为空,那么获取网页中声明的编码,如果网页中声明的编码也找不到,因为大多数抓取的都是中文网页,默认GB18030,最后把流用最后的编码处理.
16 楼 hzprogram 2013-02-05  
shabolalala 写道
不知楼主是如何自动识别网页的字符编码的,有些网页的meta里面没有charset这个属性,所以在获取网页源码时会得到乱码,请楼主指点。

问题同上!
15 楼 shabolalala 2012-01-06  
不知楼主是如何自动识别网页的字符编码的,有些网页的meta里面没有charset这个属性,所以在获取网页源码时会得到乱码,请楼主指点。
14 楼 wdz567 2011-03-19  
呵呵 抓取网页源码啊 瞧瞧啊!
13 楼 moqinan 2011-03-08  
同求细节~谢谢~
12 楼 jkvast 2011-03-01  
ld57601870 写道
楼主可否分享下源码?谢谢

反编译下 不就结了
11 楼 ld57601870 2011-02-11  
楼主可否分享下源码?谢谢
10 楼 Angi 2011-02-10  
源码可以share吗?
想了解下细节,谢谢!
9 楼 lucane 2011-02-10  
貌似需要JRE6往上
JRE5没有跑起来Bad version number in .class file
8 楼 DAOException 2011-02-09  
JavaStudyEye 写道
下来研究一下啊,

最近用httpClient 登录 189邮箱, 总是抓不到头绪,楼主给点建议啊


是不是登陆不上去?登陆的时候是否带有服务器给你的cookies信息呢?
7 楼 JavaStudyEye 2011-02-09  
下来研究一下啊,

最近用httpClient 登录 189邮箱, 总是抓不到头绪,楼主给点建议啊
6 楼 DAOException 2011-02-08  
wxq594808632 写道
mozilla基金会有一个Firefox用来自动探测编码的库,java下的port叫jchardet试试.

有空研究下他的原理是啥
5 楼 wxq594808632 2011-02-08  
mozilla基金会有一个Firefox用来自动探测编码的库,java下的port叫jchardet试试.
4 楼 DAOException 2011-02-07  
jkvast 写道
DAOException 写道
evil9999 写道
如何实现自动识别网页字符集
在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,


    额,我也做过一点时间的网页采集工作,但经常发现请求头返回的charset也有大部分网站是不正确的,好像asp。net的网站居多,网上找了半天关于判断字符窜的编码,都不是很好,不知楼主有没有什么好的方法;
    另一方面,关于效率问题,和URLConnection有没有做个比较呢。

    呵呵,Java的HttpClient倒是很熟悉,但感觉不太轻便,很多东西没用,速度也慢,看了楼主封装的挺好的,简洁实用,没注意看是否支持multipart的,(最近我也封装了个c++版本的,自己感觉还行,只是没有楼主这么封得怎么底层,哈哈,有时间研究下,楼主的代码)


    请求头里面的不正确的比较多,在html源代码里面的meta头里面的正确率比较高。我这里其实也就是对socket和http协议做了一个简单的封装,能简单则简单,毕竟只做了一天多点的成果。multipart暂时不支持,不过有时间可以考虑加进去。
    有时间可以交流交流哈。我的还比较简单。
3 楼 jkvast 2011-02-07  
DAOException 写道
evil9999 写道
如何实现自动识别网页字符集
在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,


    额,我也做过一点时间的网页采集工作,但经常发现请求头返回的charset也有大部分网站是不正确的,好像asp。net的网站居多,网上找了半天关于判断字符窜的编码,都不是很好,不知楼主有没有什么好的方法;
    另一方面,关于效率问题,和URLConnection有没有做个比较呢。

    呵呵,Java的HttpClient倒是很熟悉,但感觉不太轻便,很多东西没用,速度也慢,看了楼主封装的挺好的,简洁实用,没注意看是否支持multipart的,(最近我也封装了个c++版本的,自己感觉还行,只是没有楼主这么封得怎么底层,哈哈,有时间研究下,楼主的代码)
2 楼 DAOException 2011-02-03  
evil9999 写道
如何实现自动识别网页字符集
在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,
1 楼 evil9999 2011-02-03  
如何实现自动识别网页字符集

相关推荐

    初中语文文摘生活倒腾国货体验赚美元的感觉

    初中语文文摘生活倒腾国货体验赚美元的感觉

    教务照片倒腾.rar

    自己用Python编写的教务学生照片处理程序。根据excel文件,搜索指定目录下所有身份证或学号命名照片,拷贝到指定目录下,可以重新命名为学号或身份证号;上传教育厅需要。没有找到照片的在excel中标注not found。...

    office2013图标修复工具

    然后倒腾了半天,找到了这个直接修改注册表的办法 【使用方法】 (仅针对win7和Office2013 vol版测试过) 1、“Office 2013 图标修复.reg”注册表文件中的路径根据自己的路径修改后使用。 如我的路径是D:\\Program...

    Windows下刷BIOS软件

    是否发现自己因为是小菜而不敢轻易倒腾自己的爱机?是不是还为了刷BIOS而不知所措?使用这个工具,让你在Windows下轻轻松松刷BIOS。

    Spark源码倒腾

    NULL 博文链接:https://zhanjun.iteye.com/blog/2276294

    Android源码下载脚本

    为了这小小的需求而去倒腾一个Linux 或 cygwin 都不太合算。所以才有了本文。 repo 只是对Git命令进行了封装,所以我们可以绕过repo直接使用Git命令来下载。 为了方便大家,这里提供了一个Bash脚本,实现一个命令...

    js年月控件(无日)

    最终与同事一样倒腾出一个来。  js年月控件(无日)  使用了jquery,共3个文件,使用说明内附。 下载地址: http://u.115.com/file/f388284d67   广告一下我的QQ群,谢绝只加群不说话的人加入。 WEB前端群:...

    GD32F4xx单片机-FreeRTOS10.2.0-LWIP2.0.2移植.zip

    用一个星期研究GD32F4系列的单片机,因为公司项目越来越偏向与GD系列的片子,就借着GD32F407的片子,使用LAN8720的PHY芯片移植了最新的FreeRTOS10.2.0系统,顺便移植进了LWIP2.0.2 网络协议,倒腾了一个星期,重要是...

    单片机和Arduino有什么区别

    单片机是一个超级小型的电脑。 Arduino是一套标准,包括了软件和硬件的设计标准。(类似80年代IBM提出的PC概念) Arduino里的硬件部分是由单片机来实现的。 如果您是专业创客,那我们就来详细探究下Arduino与...

    神经网络程序源码(简化)

    为了验证我的智能理论,2000年左右我开始编写神经网络程序,先后编写了数个版本,现在给出的这个版本是我所用电脑上能找到的最后一个版本,也是精简到能在奔2上小规模应用,并可以正常运行的一个版本,将无关的东西...

    21点小游戏

    自己写的21点游戏。瞎倒腾无聊写出来的,希望对各位有帮助。

    自己写的简约大方的模版

    无聊就自己参考http://www.wdls.com.cn/跟www.32lp.com两个网站的模版瞎倒腾了一会儿~~哈哈~效果还不错。

    HP.LoadRunner.9.5.破解文件和说明

    倒腾了两三天,查询所有的51Testing和播布客网站关于LoadRunner9.5的破解方法,普遍都是用mlr5lprg.dll、lm70.dll覆盖LR9.5安装目录下“bin”文件夹中的对应文件;在手工删除注册信息,然后输入注册码。 其中最麻烦...

    网页生成注册Myeclipse码

    这几天myeclipse弹出注册码过期,去网上一搜,要么已过期,要么就剩一两个月。倒腾了半天,发现有一个很好办法,居然可以自己写个小程序,生成注册码,可以试下,我试过了,还可以用哦

    springboot登陆注册框架

    自己倒腾出来的一些可以作为学习的框架。

    Office图标修复(简单有效)

    然后倒腾了半天,找到了这个直接修改注册表的办法 【使用方法】 (仅针对win7和便携版Office2016测试过) 1、“Office 2016 图标修复.reg”注册表文件中的路径根据自己的路径修改后使用。 如我的路径是D:\\Program...

    风云四号A星实时地球云图-易语言

    )实时获取地球当前照片的小软件,自己研究了下国内的,风云四号也对外开放当前实时(每小时或45分钟更新一次)地球云图照片,自己倒腾了一下,蛮有意思的。看看我们的母星,地球。大家不要高频刷新图片数据哈,以免对...

    Coverity插件集成到VS后的分析配置方法

    在vs2012之后的版本中安装了coverity的插件后,如何配置才能将分析结果成功上传到服务器,这个文档给了一个实例,也是我最近使用的配置。倒腾了几天,终于搞定,因此分享出来,

    人人车高级产品经理:从万人坑爬出来的产品心经

    产品经理的核心工作究竟是什么?大公司和创业公司的产品经理有什么不同?如何修炼成为一个优秀的产品经理?...后来我们内部有一个hackthon比赛,我和几个小伙伴就一起孵化了一个硬件项目,叫360智键,拿了

Global site tag (gtag.js) - Google Analytics