|
|
|
| 利用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行 |
|
|
|