`
hao861002
  • 浏览: 87402 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HttpClient 学习整理(1)

阅读更多

HttpClient 学习整理

HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放在这里。

HTTP
协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的应用可以参见http://wiki.apache.org/jakarta-httpclient/HttpClientPoweredHttpClient 项目非常活跃,使用的人还是非常多的。目前 HttpClient 版本是在 2005.10.11 发布的 3.0 RC4

------------------------------------

应用HttpClient来对付各种顽固的WEB服务器
转自:http://blog.csdn.net/ambitiontan/archive/2006/01/06/572171.aspx

一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需要认证以及是一些通过加密方式传输,例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面,比如从别人的网页中一些数据;利用某些站点提供的页面来完成某种功能,例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据,因此只好借助其他公司已有的网站来完成这个功能,这个时候我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面,那我们的程序会很简单,本文也就没有必要大张旗鼓的在这里浪费口舌。但是考虑到一些服务授权的问题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到COOKIE问题的处理。我们知道目前流行的动态网页技术例如ASPJSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面,就要求程序首先登录后再访问服务页面,这过程就需要自行处理cookie,想想当你用java.net.HttpURLConnection来完成这些功能时是多么恐怖的事情啊!况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的顽固!再有如通过HTTP来上传文件呢?不需要头疼,这些问题有了就很容易解决了!

我们不可能列举所有可能的顽固,我们会针对几种最常见的问题进行处理。当然了,正如前面说到的,如果我们自己使用java.net.HttpURLConnection来搞定这些问题是很恐怖的事情,因此在开始之前我们先要介绍一下一个开放源码的项目,这个项目就是Apache开源组织中的httpclient,它隶属于Jakartacommons项目,目前的版本是2.0RC2commons下本来已经有一个net的子项目,但是又把httpclient单独提出来,可见http服务器的访问绝非易事。

Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们,为了让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容,然后循序渐进解决掉前进中的所有问题。

1 读取网页(HTTP/HTTPS)内容

下面是我们给出的一个简单的例子用来访问某个页面

/*
* Created on 2003-12-14 by Liudong
*/

package http.demo;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;

/** 
 *最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面
 
*@authorLiudong
*/

public class SimpleClient {
public static void main(String[] args) throws IOException
{
        HttpClient client = new HttpClient();
      // 设置代理服务器地址和端口           

             //client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port); 
     
// 使用 GET 方法 ,如果服务器需要通过 HTTPS 连接,那只需要将下面 URL 中的 http 换成 https
        
HttpMethodmethod=newGetMethod("http://java.sun.com");
      //使用POST方法
      //HttpMethod method = new PostMethod("http://java.sun.com");
      
client.executeMethod(method);

      
//打印服务器返回的状态
      
System.out.println(method.getStatusLine());
      
//打印返回的信息
      
System.out.println(method.getResponseBodyAsString());
      
//释放连接
      
method.releaseConnection();
   }
}

 

在这个例子中首先创建一个HTTP客户端(HttpClient)的实例,然后选择提交的方法是GET或者POST,最后在HttpClient实例上执行提交的方法,最后从所选择的提交方法中读取服务器反馈回来的结果。这就是使用HttpClient的基本流程。其实用一行代码也就可以搞定整个请求的过程,非常的简单!

分享到:
评论

相关推荐

    HttpClient3.1 学习整理

    HttpClient httpClient = new HttpClient(); GetMethod getMethod = new GetMethod("http://example.com"); int statusCode = httpClient.executeMethod(getMethod); if (statusCode == 200) { System.out....

    HttpClient_学习整理.

    ### HttpClient 学习整理 #### 一、简介 `HttpClient`是Apache Jakarta Commons下的一个子项目,用于提供高效、最新及功能丰富的HTTP客户端编程工具包。对于那些希望通过HTTP协议访问网络资源的Java应用程序而言,...

    httpclient4中文API和使用

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

    JAVA核心知识点整理 全面整理.zip

    - **HTTP客户端**: 学习使用HttpURLConnection或HttpClient库发送HTTP请求并处理响应。 7. **反射机制** - **Class对象**: 理解如何获取类的信息,包括类名、方法、属性等。 - **动态代理**: 探究如何在运行时...

    最近在学习常用的Java开源项目,整理一下常用的代码.zip

    以下是对"最近在学习常用的Java开源项目,整理一下常用的代码.zip"这个压缩包中可能包含的知识点的详细解释: 1. **Maven或Gradle构建工具**:Java项目通常使用Maven或Gradle进行构建和依赖管理。通过查看项目的pom...

    基于Java的工具类学习项目.zip

    本项目是一个基于Java的工具类学习项目,旨在整理和演示各种工具类的使用方法。项目涵盖了从Excel处理、HTTP请求、JSON序列化到高性能网络框架Netty的使用等多个方面。通过本项目,开发者可以学习到如何使用这些工具...

    源码 网站交互&JSON&xml&Webservice 通过httpclient获取到JSON数据展示到ListView

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    安卓开发工具箱v2.8.5高级版.txt打包整理.zip

    "apache"可能指的是Apache开源项目,或者是使用了Apache相关的技术,例如Apache HttpClient或Apache Ant等,这些在Android开发中常见且重要。而"#资源达人分享计划#"可能是一个社区活动或者论坛的标签,表示这是由...

    安卓京东2022自动炸年兽v2.0.txt打包整理.zip

    1. **安卓应用开发**:本项目涉及的是安卓平台的应用开发,需要了解安卓SDK、Android Studio、布局设计、Activity生命周期等基本概念。 2. **Java编程**:作为安卓应用的开发语言,需要熟悉Java语法、面向对象编程、...

    安卓点击助手v12.8绿化版.txt打包整理.zip

    1. **安卓应用开发**:使用Java编程语言进行安卓应用开发,理解Android SDK、Android Studio等开发工具的使用,以及安卓应用程序的基本架构和生命周期。 2. **绿化版应用**:了解什么是绿化版应用,它们如何通过...

    FaceLook项目源码整理

    "FaceLook项目源码整理"是一个专注于Java编程的开源项目,它可能包含了用于面部识别、图像处理或视觉计算的相关代码。这个项目的目的是为了让开发者能够学习、理解和应用相关的技术。从提供的文件列表来看,我们可以...

    轻松上手Java爬虫:CSDN文章抓取与整理.zip

    在本压缩包中,你将找到一个Java实现的CSDN文章抓取与整理的项目,这将是一个很好的起点来学习和实践Java爬虫技术。 首先,了解Java爬虫的基础是必不可少的。Java作为一种流行的编程语言,拥有强大的网络处理库,如...

    安卓可抖视v1.2.9免费版.txt打包整理.zip

    【标题解析】 "安卓可抖视v1.2.9免费版.txt打包...对于开发者而言,这个压缩包是一个学习和参考的宝贵资源,涵盖了实际开发中的多个方面,从编程语言到应用设计,再到商业运营,都是提升技能和了解行业趋势的重要途径。

    Java手机短信项目源码Java实用源码整理learns

    这是一份实用的源码整理,对于想要深入学习Java编程,特别是对Java在实际项目中的运用感兴趣的开发者来说,是非常有价值的参考资料。 1. **短信服务接口**:在Java项目中,通常会定义一个短信服务接口,这个接口...

    C#基类整理C#比较全的基类集合

    这个压缩包文件“C#基类整理C#比较全的基类集合”可能包含了一系列C#基础类的代码示例和解释,帮助开发者理解和运用这些类。 首先,我们来看一下C#中的几个关键基类: 1. **System.Object**:所有C#类的终极基类,...

    Java核心知识点整理.rar

    这份"Java核心知识点整理.rar"压缩包包含了对Java语言全面而深入的总结,对于初学者和有一定经验的开发者来说,都是宝贵的参考资料。下面,我们将详细探讨Java的核心知识点,并按照一个合理的学习路线进行阐述。 1....

    本人整理的一些常用的c#代码

    这个压缩包“本人整理的一些常用的c#代码”显然是一个针对初学者的学习资源集合,包含了各种实用的C#代码示例,旨在帮助新手快速掌握编程基础。 1. **基础语法**:C#的基础语法结构包括变量声明、数据类型(如int、...

    java+http+操作cookies源码整理

    这个源码整理主要关注如何在Java中使用HTTP进行Cookies的操作。以下是对这些知识点的详细解释。 首先,理解Cookies的基本概念。Cookies是由服务器端发送到客户端(浏览器)的一小段文本信息,用来存储用户的状态...

    Java常用代码整理

    1. **基础语法**:Java的基础语法包括数据类型(如整型、浮点型、字符型、布尔型)、变量声明、运算符、流程控制(如if条件语句、for循环、while循环、switch选择结构)以及方法定义等。 2. **类与对象**:面向对象...

    JAVA核心知识点整理_java面试指南_java面试_

    2. 泛型:学习如何使用泛型限制集合元素类型,提高代码安全性和可读性。 3. 接口与实现:掌握List、Set、Map接口及其具体实现类的使用。 三、多线程 1. 线程基础:创建线程的方式(Thread类、Runnable接口),线程...

Global site tag (gtag.js) - Google Analytics