论坛首页 Java企业应用论坛

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

浏览 10788 次
精华帖 (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下部署多个不同域名的网站。
    c:  1.0以前是一次只能处理一个web请求,而1.1一次可以并发的处理多个连接,不过这里 有个限制,一般情况下一个域名下最多只会同时建立两条连接进行并发处理。

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

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

 

   欢迎大家继续补充。

   发表时间:2011-02-03  
如何实现自动识别网页字符集
0 请登录后投票
   发表时间:2011-02-03  
evil9999 写道
如何实现自动识别网页字符集
在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,
0 请登录后投票
   发表时间:2011-02-07   最后修改:2011-02-07
DAOException 写道
evil9999 写道
如何实现自动识别网页字符集
在head里面的meta头里面有个charset属性,一般这个都是较为准确的字符编码属性,http响应头当中的未必正确。在接收字符串的时候,去识别该属性值,从而对获取的源码进行编码转换,


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

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


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

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


    请求头里面的不正确的比较多,在html源代码里面的meta头里面的正确率比较高。我这里其实也就是对socket和http协议做了一个简单的封装,能简单则简单,毕竟只做了一天多点的成果。multipart暂时不支持,不过有时间可以考虑加进去。
    有时间可以交流交流哈。我的还比较简单。
0 请登录后投票
   发表时间:2011-02-08  
mozilla基金会有一个Firefox用来自动探测编码的库,java下的port叫jchardet试试.
0 请登录后投票
   发表时间:2011-02-08  
wxq594808632 写道
mozilla基金会有一个Firefox用来自动探测编码的库,java下的port叫jchardet试试.

有空研究下他的原理是啥
0 请登录后投票
   发表时间:2011-02-09  
下来研究一下啊,

最近用httpClient 登录 189邮箱, 总是抓不到头绪,楼主给点建议啊
0 请登录后投票
   发表时间:2011-02-09  
JavaStudyEye 写道
下来研究一下啊,

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


是不是登陆不上去?登陆的时候是否带有服务器给你的cookies信息呢?
0 请登录后投票
   发表时间:2011-02-10  
貌似需要JRE6往上
JRE5没有跑起来Bad version number in .class file
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics