锁定老帖子 主题:自己倒腾的一个小的HTTP小工具
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-03
最后修改:2011-02-06
说是小工具,其实就是个简单的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下部署多个不同域名的网站。 d: 1.1增加了身份验证机制。 e: 1.1支持断点续传,有个range属性,用来告诉服务器本次是希望从指定位置开始接收文件。
欢迎大家继续补充。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-02-03
如何实现自动识别网页字符集
|
|
返回顶楼 | |
发表时间:2011-02-03
evil9999 写道 如何实现自动识别网页字符集 在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,
|
|
返回顶楼 | |
发表时间:2011-02-07
最后修改:2011-02-07
DAOException 写道 evil9999 写道 如何实现自动识别网页字符集 在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,额,我也做过一点时间的网页采集工作,但经常发现请求头返回的charset也有大部分网站是不正确的,好像asp。net的网站居多,网上找了半天关于判断字符窜的编码,都不是很好,不知楼主有没有什么好的方法; 另一方面,关于效率问题,和URLConnection有没有做个比较呢。 呵呵,Java的HttpClient倒是很熟悉,但感觉不太轻便,很多东西没用,速度也慢,看了楼主封装的挺好的,简洁实用,没注意看是否支持multipart的,(最近我也封装了个c++版本的,自己感觉还行,只是没有楼主这么封得怎么底层,哈哈,有时间研究下,楼主的代码) |
|
返回顶楼 | |
发表时间:2011-02-07
jkvast 写道 DAOException 写道 evil9999 写道 如何实现自动识别网页字符集 在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,额,我也做过一点时间的网页采集工作,但经常发现请求头返回的charset也有大部分网站是不正确的,好像asp。net的网站居多,网上找了半天关于判断字符窜的编码,都不是很好,不知楼主有没有什么好的方法; 另一方面,关于效率问题,和URLConnection有没有做个比较呢。 呵呵,Java的HttpClient倒是很熟悉,但感觉不太轻便,很多东西没用,速度也慢,看了楼主封装的挺好的,简洁实用,没注意看是否支持multipart的,(最近我也封装了个c++版本的,自己感觉还行,只是没有楼主这么封得怎么底层,哈哈,有时间研究下,楼主的代码) 请求头里面的不正确的比较多,在html源代码里面的meta头里面的正确率比较高。我这里其实也就是对socket和http协议做了一个简单的封装,能简单则简单,毕竟只做了一天多点的成果。multipart暂时不支持,不过有时间可以考虑加进去。 有时间可以交流交流哈。我的还比较简单。 |
|
返回顶楼 | |
发表时间:2011-02-08
mozilla基金会有一个Firefox用来自动探测编码的库,java下的port叫jchardet试试.
|
|
返回顶楼 | |
发表时间:2011-02-08
wxq594808632 写道 mozilla基金会有一个Firefox用来自动探测编码的库,java下的port叫jchardet试试.
有空研究下他的原理是啥 |
|
返回顶楼 | |
发表时间:2011-02-09
下来研究一下啊,
最近用httpClient 登录 189邮箱, 总是抓不到头绪,楼主给点建议啊 |
|
返回顶楼 | |
发表时间:2011-02-09
JavaStudyEye 写道 下来研究一下啊,
最近用httpClient 登录 189邮箱, 总是抓不到头绪,楼主给点建议啊 是不是登陆不上去?登陆的时候是否带有服务器给你的cookies信息呢? |
|
返回顶楼 | |
发表时间:2011-02-10
貌似需要JRE6往上
JRE5没有跑起来Bad version number in .class file |
|
返回顶楼 | |