风行天下

JAVA太极
posts - 4, comments - 10, trackbacks - 0, articles - 55
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Jakarta Commons HttpClient

Posted on 2005-04-04 11:18 风太少 阅读(736) 评论(0)  编辑  收藏
SECTION 01 HttpClient 总览

Hyper-Text Transfer Protocol (HTTP) 是现在网络上最通行的通讯协议, 随著 Webservice 的技术快速发展, 也让许多的应用程序结合 HTTP 扩展更大的功能, 或许你会说 java.net 不是已经有基本的存取 HTTP 的 method 了, 为何还要有这个 commons 的项目呢, 请容许我慢慢说明 ~~


binary 下载处 http://jakarta.apache.org/builds/jakarta-commons/release/commons-httpclient/v2.0/

source 下载处 http://www.apache.org/dist/jakarta/commons/httpclient/source/


SECTION 02 特色

是因为他的特色..... 有许多是 java.net.* 没有提供的, 或者自己要实现的. 不如就直接采用 commons-httpclient.
  • 使用 Pure Java 开发标准的 HTTP v1.0 及 v1.1
  • 实现所有的 HTTP methods (GET, POST, PUT, DELETE,HEAD, OPTIONS, and TRACE)
  • 支持 HTTPS 的协议
  • 支持 proxies 的各种情况
  • 利用 Multi Form 上传文件
  • 支持认证机制
  • 可以设置最大连结数量
  • 自动的 cookie 处理模式
  • Request 及 Response 最佳化处理
  • 支持 HTTP 1.0 KeepAlive 联机模式及 1.1 的 persistance 保存状态
  • 直接存取服务器送来的 response code 及 header
  • 能够设置连结超时
  • 实现 Command Pattern 允许去平行处理及有效重复使用连结.
  • 这个是开放源码的



SECTION 03 依循自

Commons-HttpClient 是遵循了下面的 spec ( Internet Engineering Task Force (IETF) )
  • RFC1945Hypertext Transfer Protocol -- HTTP/1.0
  • RFC2616Hypertext Transfer Protocol -- HTTP/1.1
  • RFC2617HTTP Authentication: Basic and Digest Access Authentication
  • RFC2109HTTP State Management Mechanism (Cookies)
  • RFC2396Uniform Resource Identifiers (URI): Generic Syntax
  • RFC1867Form-based File Upload in HTML



SECTION 04 与其它的 HttpClient 比较

此来源出自 http://www.nogoop.com/product_16.html#compare
nogoop Sun innovation Jakarta
Features
cookies X X
plug compatible X X X [partial]
true request output stream X X
true response input stream X X X
connection keep alive X X X X
connection pool throttling X X
connection/request timeout X X X
idle connection timeout X
pipelining of requests X
SSL X X X X
basic authentication X X X X
digest authentication X X X X
NTLM authentication X X
proxy authentication X X X X
Support
minimum JRE version 1.2 1.0 1.2 1.2
price $399 free free free
source available X X X
diagnostic tracing X X X
actively supported X X X
fix turnaround fast slow none medium
license purchase Sun JRE LGPL Apache



SECTION 05 简单范例

基本上 HttpClient 需要 commons-logging, 所以你要在 classpath 设置这两个 jar 文件, 接著你要了解 HTTP 通讯的方式, 标准步骤如下..
  1. 建立 HttpClient 的 instance ( HttpClient client = new HttpClient(); )
  2. 建立 HttpClient instance 要使用的 method ( 例如 GET/POST 等等 连结到一个 URL , HttpMethod method = new GetMethod("http://www.apache.org/"); )
  3. 告诉 HttpClient 去执行这个讯息 ( statusCode = client.executeMethod(method); )
  4. 得到 Server 端的响应 ( byte[] responseBody = method.getResponseBody(); )
  5. 结束这个连结 ( method.releaseConnection(); )
  6. 处理这个响应数据 ( System.err.println(new String(responseBody)); )

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import java.io.*;

public class HttpClientTutorial {
  
  private static String url = "http://www.apache.org/";

  public static void main(String[] args) {
	// Create an instance of HttpClient.
	HttpClient client = new HttpClient();

	// Create a method instance.
	HttpMethod method = new GetMethod(url);

	// Execute the method.
	int statusCode = -1;
	int attempt = 0;
	// We will retry up to 3 times.
	while (statusCode == -1 && attempt < 3) {
	  try {
		// execute the method.
		statusCode = client.executeMethod(method);
	  } catch (HttpRecoverableException e) {
		System.err.println(
		  "A recoverable exception occurred, retrying." + 
		  e.getMessage());
	  } catch (IOException e) {
		System.err.println("Failed to download file.");
		e.printStackTrace();
		System.exit(-1);
	  }
	}
	// Check that we didn't run out of retries.
	if (statusCode == -1) {
	  System.err.println("Failed to recover from exception.");
	  System.exit(-2);
	}


	// Read the response body.
	byte[] responseBody = method.getResponseBody();

	// Release the connection.
	method.releaseConnection();

	// Deal with the response.
	// Use caution: ensure correct character encoding and is not binary data
	System.err.println(new String(responseBody));
  }
}

只有注册用户登录后才能发表评论。


网站导航: