用户: 密码: 答案:   我要注册   忘记密码

加入收藏  设为首页

开发文档

CNJM首页

业界新闻

手机软件

终端应用

资源下载

EclipseME

CNJM论坛

                 

频道列表

J2ME开发 176篇
服务器端开发 33篇
JAVA语言 71篇
游戏与图形 101篇
WindowsMobile开发 6篇
Symbian开发 61篇
Brew开发 36篇
其它开发平台 6篇

热点文章

Jakarta Commons H... 15246次
利用HttpClient获...  11997次
[原创]反编译器jad... 10930次
防止JAVA代码被反...  9061次
Java异常处理 7840次
看例子练apache co... 7762次
每个JAVA初学者都...  7634次
加密与数字签名 7625次
为测试 Java 应用...  7072次
用JAVA设计面向对...  6953次
Java网络编程笔记(1) 6885次
移动视频: QuickTi... 6729次

文章搜索

搜 索
按 照
频 道
  
利用HttpClient获取网页内容
编辑:rocks    审核:rocks    文章来源:网络采集
关键词:无    发表日期:2006-03-09 10:46:38    浏览次数:11998次
本文版权归原作者,中国JAVA手机网收录本文的目的是让更多人阅读到此文章。转载请注明出处为中国JAVA手机网<www.cnjm.net>
来自:http://www.cnjm.net/tech/article1153.html

HTTP协议是目前互联网上最重要的协议,许多软件与服务都需要依赖HTTP协议。
JAVA手机网[www.cnjm.net]
虽然java.net这个package中包含了对HTTP的基本支持,但还有很多高级和复杂的功能无法实现,这不能不说是一个遗憾。
HttpClient作为Apache的开源项目项目之一,为基于HTTP协议的操作提供了强大的客户端执行支持,最新的版本为3.0RC3。
下面通过一个例子简要展示HttpClient的使用方法:

--------------------------------------------------------------------------------
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
iimport java.io.UnsupportedEncodingException;

import java.util.*;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

/**
JAVA手机网[www.cnjm.net]
* @author steven
*/
public class HttpClientExample {

JAVA手机网[www.cnjm.net]
//获得ConnectionManager,设置相关参数
private static MultiThreadedHttpConnectionManager manager =
new MultiThreadedHttpConnectionManager();
private static int connectionTimeOut = 20000;
private static int socketTimeOut = 10000;
private static int maxConnectionPerHost = 5;
private static int maxTotalConnections = 40;

JAVA手机网[www.cnjm.net]
//标志初始化是否完成的flag
private static boolean initialed = false;

//初始化ConnectionManger的方法
public static void SetPara() {
manager.getParams().setConnectionTimeout(connectionTimeOut);
manager.getParams().setSoTimeout(socketTimeOut);
manager.getParams()
.setDefaultMaxConnectionsPerHost(maxConnectionPerHost);
manager.getParams().setMaxTotalConnections(maxTotalConnections);
initialed = true;
}

//通过get方法获取网页内容
public static String getGetResponseWithHttpClient(String url, String encode) {
HttpClient client = new HttpClient(manager);
JAVA手机网[www.cnjm.net]

if (initialed) {
HttpClientExample.SetPara();
}

GetMethod get = new GetMethod(url);
get.setFollowRedirects(true);
JAVA手机网[www.cnjm.net]

JAVA手机网[www.cnjm.net]
String result = null;
StringBuffer resultBuffer = new StringBuffer();

try {

client.executeMethod(get);

//在目标页面情况未知的条件下,不推荐使用getResponseBodyAsString()方法
//String strGetResponseBody = post.getResponseBodyAsString();
BufferedReader in = new BufferedReader(
new InputStreamReader(
get.getResponseBodyAsStream(),
JAVA手机网[www.cnjm.net]
get.getResponseCharSet()));
JAVA手机网[www.cnjm.net]

String inputLine = null;

while ((inputLine = in.readLine()) != null) {
resultBuffer.append(inputLine);
resultBuffer.append("\n");
}

in.close();

result = resultBuffer.toString();

//iso-8859-1 is the default reading encode
result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
get.getResponseCharSet(),
encode);
JAVA手机网[www.cnjm.net]
} catch (Exception e) {
e.printStackTrace();

result = "";
} finally {
get.releaseConnection();
JAVA手机网[www.cnjm.net]

JAVA手机网[www.cnjm.net]
return result;
}
JAVA手机网[www.cnjm.net]
}

public static String getPostResponseWithHttpClient(String url,
String encode) {
HttpClient client = new HttpClient(manager);
JAVA手机网[www.cnjm.net]

if (initialed) {
HttpClientExample.SetPara();
}

PostMethod post = new PostMethod(url);
post.setFollowRedirects(false);

JAVA手机网[www.cnjm.net]
StringBuffer resultBuffer = new StringBuffer();

String result = null;
JAVA手机网[www.cnjm.net]

JAVA手机网[www.cnjm.net]
try {
client.executeMethod(post);

BufferedReader in = new BufferedReader(
JAVA手机网[www.cnjm.net]
new InputStreamReader(
post.getResponseBodyAsStream(),
post.getResponseCharSet()));
String inputLine = null;

while ((inputLine = in.readLine()) != null) {
resultBuffer.append(inputLine);
resultBuffer.append("\n");
}

in.close();

//iso-8859-1 is the default reading encode
result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
post.getResponseCharSet(),
encode);
} catch (Exception e) {
e.printStackTrace();

result = "";
JAVA手机网[www.cnjm.net]
} finally {
post.releaseConnection();

return result;
}
}

public static String getPostResponseWithHttpClient(String url,
String encode,
JAVA手机网[www.cnjm.net]
NameValuePair[] nameValuePair) {
HttpClient client = new HttpClient(manager);

if (initialed) {
HttpClientExample.SetPara();
}

PostMethod post = new PostMethod(url);
post.setRequestBody(nameValuePair);
post.setFollowRedirects(false);

String result = null;
StringBuffer resultBuffer = new StringBuffer();

try {
JAVA手机网[www.cnjm.net]
client.executeMethod(post);
BufferedReader in = new BufferedReader(
new InputStreamReader(
post.getResponseBodyAsStream(),
post.getResponseCharSet()));
String inputLine = null;

while ((inputLine = in.readLine()) != null) {
resultBuffer.append(inputLine);
resultBuffer.append("\n");
}

in.close();


//iso-8859-1 is the default reading encode
result = HttpClientExample.ConverterStringCode(resultBuffer.toString(),
JAVA手机网[www.cnjm.net]
post.getResponseCharSet(),
encode);
} catch (Exception e) {
e.printStackTrace();

result = "";
} finally {
post.releaseConnection();

return result;
}
}

private static String ConverterStringCode(String source, String srcEncode, String destEncode) {
if (src != null) {
try {
return new String(src.getBytes(srcEncode), destEncode);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
} else {
return "";
}
}
}

--------------------------------------------------------------------------------
JAVA手机网[www.cnjm.net]
之后,就可以通过下面的代码获得目标网页:
String source = HttpClientExample.getGetResponseWithHttpClient("www.sina.com.cn", "GBK");

注意,在默认情况下,HttpClient的Request的Head中
JAVA手机网[www.cnjm.net]
User-Agent的值是Jakarta Commons-HttpClient 3.0RC1,如果需要改变它(例如,变为Mozilla/4.0),必须在调用之前运行如下语句:
System.getProperties().setProperty("httpclient.useragent", "Mozilla/4.0");
来自:http://www.cnjm.net/tech/article1153.html

相关文章
   暂无相关文章
最新评论
匿名 在 2006-08-16 11:02:42 发表的评论:
大哥啊,也运行不了啊,有错误,是host parameter is null错误,提示在64行 
网站简介  |  关于版权  |  广告服务  |  网站地图  |  联系我们
Copyright © www.CNJM.net, All rights reserved
中国JAVA手机网 版权所有
ICP备案:京ICP备041452