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

HttpClient笔记

阅读更多
背景:因为想写一个测试tomcat连接的程序,就试试自已去构造Http请求。找了一下发现Apache下有一个比较成熟的轮子HttpComponets.

使用库:Apache Http Client
HttpClient是一个代码级的Http客户端工具,可以使用它模拟浏览器向Http服务器发送请求。
其中HttpClient是HttpComponents项目其中的一部份,HttpComponents简称为hc.
见http://hc.apache.org/
使用HttpClient还需要HttpCore.这里其中包括Http请求与Http响应的代码封装。

现在导入两个jar包:
httpclient-4.0.jar
httpcore-4.0.jar
httpmime-4.0.jar


开始一个请求代码如下:
Java代码
HttpClient httpClient = new DefaultHttpClient();  
//构造请求,如果想使用POST则new一个HttpPost  
        HttpGet get = new HttpGet("http://www.iteye.com");  
        HttpResponse response = httpClient.execute(get);  
//先从响应头得到实体  
        HttpEntity entity = response.getEntity();     
//得到实体输入流  
        InputStream inSm = entity.getContent();  
        Scanner inScn = new Scanner(inSm);  
        while(inScn.hasNextLine()){  
            System.out.println(inScn.nextLine());  
        }  
        entity.consumeContent(); 

HttpClient httpClient = new DefaultHttpClient();
//构造请求,如果想使用POST则new一个HttpPost
HttpGet get = new HttpGet("http://www.iteye.com");
HttpResponse response = httpClient.execute(get);
//先从响应头得到实体
HttpEntity entity = response.getEntity();
//得到实体输入流
InputStream inSm = entity.getContent();
Scanner inScn = new Scanner(inSm);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
entity.consumeContent();

这个是在HC例子中有代码作了少量的修改。
输出:
Java代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">  
  <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>  
    <title>JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区</title>  
    <meta name="description" content="Java编程,Spring Struts Webwork框架深入,XMLHTTP AJAX开发,Java Web开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,Rich Client讨论,Ruby编程,Ruby DSL开发,Ruby on rails实践,JavaScript编程,敏捷软件开发XP TDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.net C/C++ Erlang/FP PHP/Linux平台,精通Hibernate" />  
    <meta name="keywords"  content="Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 JavaEye深度技术社区" />  
    <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />  
    <link href="/rss" rel="alternate" title="JavaEye技术网站RSS频道订阅" type="application/rss+xml" />  
    <link href="http://www.iteye.com/stylesheets/homepage.css?1263389049" media="screen" rel="stylesheet" type="text/css" />  
      
  </head>  
 
...省略,证明以上代码已经成功 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>JavaEye Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 - JavaEye做最棒的软件开发交流社区</title>
    <meta name="description" content="Java编程,Spring Struts Webwork框架深入,XMLHTTP AJAX开发,Java Web开发,Java企业应用,Java设计模式,Java开源框架,Java应用服务器,Rich Client讨论,Ruby编程,Ruby DSL开发,Ruby on rails实践,JavaScript编程,敏捷软件开发XP TDD,软件配置管理,软件测试,项目管理UML,数据库,C#/.net C/C++ Erlang/FP PHP/Linux平台,精通Hibernate" />
    <meta name="keywords"  content="Java编程 Spring框架 AJAX技术 Agile敏捷软件开发 ruby on rails实践 JavaEye深度技术社区" />
    <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
    <link href="/rss" rel="alternate" title="JavaEye技术网站RSS频道订阅" type="application/rss+xml" />
    <link href="http://www.iteye.com/stylesheets/homepage.css?1263389049" media="screen" rel="stylesheet" type="text/css" />
   
  </head>

...省略,证明以上代码已经成功

当然这个只是大刀一小试。现在还离我的目标差一点点:
需要做个头,我还不太清楚有什么头可以使用,那样我又写了个程序看看IE的头到底是怎样子的,
没有抓包程序,只好自已写个程序:
Java代码
ServerSocket socketServer = new ServerSocket(10086);  
        Socket client = socketServer.accept();  
        InputStream inClient = client.getInputStream();  
        Scanner inScn = new Scanner(inClient);  
        while(inScn.hasNextLine()){  
            System.out.println(inScn.nextLine());  
        }  
        inScn.close();  
        client.close();  
        socketServer.close(); 

ServerSocket socketServer = new ServerSocket(10086);
Socket client = socketServer.accept();
InputStream inClient = client.getInputStream();
Scanner inScn = new Scanner(inClient);
while(inScn.hasNextLine()){
System.out.println(inScn.nextLine());
}
inScn.close();
client.close();
socketServer.close();

在IE地址栏上输入:
http://locahost:10086/
点确定后可以得到程序输出:
Java代码
GET / HTTP/1.1 
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*  
Accept-Language: zh-CN  
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)  
Accept-Encoding: gzip, deflate  
Host: localhost:10086 
Connection: Keep-Alive 

GET / HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Accept-Encoding: gzip, deflate
Host: localhost:10086
Connection: Keep-Alive

分析请求包中这六个头信息。可以参考以下文章:
http://zsxxsz.iteye.com/blog/568250
现在我使用HC模拟IE的请求,修改后代码如下:
Java代码
HttpClient httpClient = new DefaultHttpClient();  
        HttpGet get = new HttpGet("http://www.iteye.com");  
          
        get.setHeader("Accept", "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");  
        get.setHeader("Accept-Language","zh-CN");  
        get.setHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 87; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)");  
        get.setHeader("Accept-Encoding","gzip, deflate");  
        get.setHeader("Host","you never be know");  
        get.setHeader("Connection","Keep-Alive");  
          
        HttpResponse response = httpClient.execute(get); 
分享到:
评论

相关推荐

    httpclient4中文API和使用

    `httpClient笔记.docx`可能是用户或教程作者整理的关于使用HttpClient的笔记或实战案例,可能包括一些常见问题的解决方案,比如处理重定向、处理cookies、上传下载文件、使用HTTPS等。 学习HttpClient时,除了API...

    HttpClient学习笔记

    HttpClient学习笔记 模拟测试浏览器表单提交

    httpclient4.5笔记,常用知识点,从零开始也能看懂(持续更新)

    以下是一些关于 HttpClient 4.5 的重要知识点: 1. **HttpClient 创建与配置**: HttpClient 4.5 提供了 `HttpClients.createDefault()` 方法,用于创建默认的、可关闭的 HTTP 客户端实例。全局使用一个客户端可以...

    HttpClient学习笔记参考.pdf

    6. **连接管理**: HttpClient 内置了连接管理器,可以控制并发连接的数量,自动检测并关闭失效连接,适应多线程应用。 7. **持久连接**:支持HTTP/1.0的KeepAlive和HTTP/1.1的持久连接,提高效率。 8. **直接访问...

    HttpClient 学习笔记

    HttpClient 特别强调了在多线程环境中的连接管理和性能优化,能够处理代理、SSL/TLS 安全连接、认证以及文件上传等功能。 在使用 HttpClient 之前,可能需要进行一些预备工作。例如,如果你的 JRE 版本是 1.3.* ...

    android 学习笔记6-HttpClient 多线程下载 断点续传 进度条 源码关联

    1、使用HttpClient发送GET请求: 2、使用HttpClient发送POST请求:和之前的GET类似 3、使用异步HttpClient发送请求,可以在github上找一些别人已经写好的代码,封装度比较高,直接拿来用。 4、多线程下载:使用...

    淘淘商城笔记

    《淘淘商城笔记》主要涵盖了Java技术在电商系统开发中的应用,这是一份详细记录了淘淘商城系统架构和技术选型的学习文档。由于文件名仅给出"笔商城记",推测这可能是文档的部分章节或者子目录,具体内容可能包括但不...

    http client

    HttpClient是Apache开源组织提供的一个Java库,用于执行HTTP请求。...通过阅读官方文档和相关的学习笔记(如HttpClient学习笔记.doc),可以进一步深化对HttpClient的理解,掌握其高级特性和最佳实践。

    有道云笔记内容下载java版,有道云笔记备份到本地

    标题 "有道云笔记内容下载java版,有道云...它利用了Java的网络请求库(如HttpURLConnection或Apache HttpClient)、JSON解析库(如Jackson或Gson)以及文件操作功能,为用户提供了便捷的数据备份和本地化管理方式。

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    Java学习笔记(javase)

    Apache是Java生态系统中的一个重要组成部分,它不仅是一个开源的Web服务器,也是许多Java库和框架(如Apache HttpClient、Apache Tomcat等)的开发者。这些库和框架简化了开发过程,提供了诸如HTTP通信、应用服务器...

    学习笔记 十分有用 java

    你还能了解到URL、URLConnection以及HTTPClient的相关知识,这些都是构建网络应用的关键。 此外,笔记中还包含了对Tomcat服务器的介绍和使用。Tomcat是一款轻量级的Java Web应用服务器,是初学者部署和运行Servlet...

    Android代码-AndroidNote Android笔记

    Android学习笔记 &gt; 十年生死两茫茫,不思量,自难忘,华年短暂,陈辞岁月悠悠伤, &gt; 满腔热血已芜荒,展未来,后生强,战战兢兢,如履薄冰心彷徨, &gt; 青丝化雪、鬓角成霜,已是英雄迟暮,人生怎慷慨激昂? 目录 ...

    B站java狂神说笔记

    Apache是常见的开源软件项目,其产品如Tomcat(Java EE应用服务器)、HttpClient(网络通信库)、Log4j(日志框架)等在Java开发中广泛应用。笔记可能会介绍如何集成和使用这些工具。 总结,【Java狂神说笔记】是一...

    jt07日常笔记

    笔记不仅涵盖了项目的具体实施细节,还涉及到了多种技术手段的运用,如JSONP、HttpClient等,这些技术在实际开发过程中起到了关键作用。 #### 二、跨域访问解决方案:JSONP 跨域问题一直是前端开发中的一个重要...

    jt08工作笔记

    ### jt08工作笔记知识点梳理 #### 商品详情页与前后端交互 - **商品详情页设计**:在项目04中,商品详情页是前端与后端交互的关键环节。前端负责展示商品信息,而后端则负责组织并提供这些信息。 - **前后端交互...

    Mono for Android和MonoDroid学习笔记全套

    6. **网络通信**:了解如何使用HttpClient或WebClient进行网络请求,以及如何处理JSON或XML数据。 7. **权限管理**:Android应用需要声明和管理权限,笔记会介绍如何在AndroidManifest.xml中配置权限。 8. **调试...

    Android开发之HttpClient异步请求数据的方法详解【附demo源码下载】

    前面一篇Android开发笔记之:AsyncTask的应用较为详细的讲述了Asynctask的原理与应用,这里来结合使用一下HttpClient与Asynctask~ 代码编写如下: 服务器代码我就不写出来了,就是一个用户名和密码~ 1.写一个类...

Global site tag (gtag.js) - Google Analytics