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

采用Jakarta的HttpClient API模拟客户端GET和POST提交

阅读更多

最近搞一个扣网页内容的SessionBean,需要模拟客户端post提交,然后得到servlet返回的结果。
采用Jakarta的HttpClient API解决之.
HttpClient扩展和增强了标准java.net包,是一个内容广泛的代码库,功能极其丰富,能够构造出各
种使用HTTP协议的分布式应用,或者也可以嵌入到现有应用,为应用增加访问HTTP协议的能力

要求:
1:CLASSPATH中有commons-httpclient.jar,common-logging.jar
2:确保%JAVA_HOME% /jre/lib/security/java.security文件包含这行代码:
security.provider.2= com.sun.net.ssl.internal.ssl.Provider。

一:GET方法测试代码:

/**//*
*CreatedonSep25,2006
*
*Tochangethetemplateforthisgeneratedfilegoto
*Window>Preferences>Java>CodeGeneration>CodeandComments
*/

packageco.iproxy.http;

importjava.io.IOException;

importorg.apache.commons.httpclient.HttpClient;
importorg.apache.commons.httpclient.HttpException;
importorg.apache.commons.httpclient.HttpStatus;
importorg.apache.commons.httpclient.methods.GetMethod;

/***//**
*
@authorlichunlei
*
*Tochangethetemplateforthisgeneratedtypecommentgoto
*Window>Preferences>Java>CodeGeneration>CodeandComments
*/

publicclassHttpClientGetMethodTest
...{

publicstaticvoidmain(String[]args)
...{
HttpClientclient
=newHttpClient();
Stringurl
=http://192.18.0.19:9080/care/careTest/index.jsp;
GetMethodmethod
=newGetMethod(url);

try
...{
client.executeMethod(method);
if(method.getStatusCode()==HttpStatus.SC_OK)
...{
Stringresponse
=method.getResponseBodyAsString();
System.out.println(response);
}


}

catch(HttpExceptione)
...{
e.printStackTrace();

}

catch(IOExceptione)
...{
e.printStackTrace();
}

finally
...{

method.releaseConnection();
method.recycle();
}


}

}

二:POST方法测试代码:

/**//*
*CreatedonSep25,2006
*
*Tochangethetemplateforthisgeneratedfilegoto
*Window>Preferences>Java>CodeGeneration>CodeandComments
*/

packageco.iproxy.http;

importjava.io.BufferedReader;
importjava.io.ByteArrayInputStream;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.IOException;
importjava.io.InputStream;

importorg.apache.commons.httpclient.DefaultMethodRetryHandler;
importorg.apache.commons.httpclient.HostConfiguration;
importorg.apache.commons.httpclient.HttpClient;
importorg.apache.commons.httpclient.HttpStatus;
importorg.apache.commons.httpclient.methods.PostMethod;

/***//**
*
@authorlichunlei
*
*Tochangethetemplateforthisgeneratedtypecommentgoto
*Window>Preferences>Java>CodeGeneration>CodeandComments
*/

publicclassHttpClientPostMethodTest
...{

staticintBASE_BODY_SIZE=10240;
staticintINC_BODY_SIZE=51200;

publicstaticvoidmain(String[]args)
...{

Stringrequest
=null;
Stringurl
=http://12.20.69.50:5080/Web/Servicelet;
Stringresult
=null;

StringfilePath
="D:/OPS_piese_idl36(fromcvs)/Ntelagent/co/iproxy/http/request.txt";
Filef
=newFile(filePath);
FileReaderfileReader
=null;
try
...{
fileReader
=newFileReader(f);
BufferedReaderbufferedReader
=newBufferedReader(fileReader);
StringcurrentLine;
StringBuffercontent
=newStringBuffer();
while((currentLine=bufferedReader.readLine())!=null)
...{
content.append(currentLine);
}

request
=content.toString();
}

catch(Exceptione1)
...{
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}


System.out.println(
"therequestis:"+request);

DefaultMethodRetryHandlerretryhandler
=newDefaultMethodRetryHandler();
retryhandler.setRequestSentRetryEnabled(
true);
retryhandler.setRetryCount(
2);//retry2times

HttpClienthttpClient
=newHttpClient();
PostMethodmethod
=newPostMethod(url);

InputStreamdata
=newByteArrayInputStream(request.getBytes());
method.setRequestBody(data);

method.setFollowRedirects(
true);
method.setMethodRetryHandler(retryhandler);

try
...{

//executethemethod
HostConfigurationcf=newHostConfiguration();
System.out.println(
"useproxy");
cf.setProxy(
"192.18.254.22",4480);
httpClient.setHostConfiguration(cf);
//httpClient.setTimeout(10000000);

intretcode=httpClient.executeMethod(method);

if(retcode==HttpStatus.SC_OK)
...{
byte[]responseBody=newbyte[BASE_BODY_SIZE];
java.io.InputStreamistream
=method.getResponseBodyAsStream();
intnpos=0;
intnread=0;
while((nread=istream.read(responseBody,npos,responseBody.length-npos))>=0)
...{
npos
+=nread;
if(npos>=responseBody.length)
...{
byte[]tmpBuf=newbyte[npos+INC_BODY_SIZE];
System.arraycopy(responseBody,
0,tmpBuf,0,npos);
responseBody
=tmpBuf;
}

}


result
=newString(responseBody,0,npos);
}

else
...{
thrownewIOException("failedtosendrequest:retcode:"+retcode);
}


}

catch(Exceptione)
...{
}

finally
...{
System.out.println(
"lcltestinhttpClient:"+result);

}


}

}



以上两个class已经包含了大部分常用的模拟http客户端的技术了,包括设置代理服务器,提交表单,得到返回结果等.
通过上面的测试代码,已经可以初步解决扣网页的问题了.现在备份一下我的实现方法(不是很通用,需要进一步完善), 同时也供大家参考.

/**//*
*CreatedonSep25,2006
*
*Tochangethetemplateforthisgeneratedfilegoto
*Window>Preferences>Java>CodeGeneration>CodeandComments
*/

packageco.iproxy.http;

importjava.io.ByteArrayInputStream;
importjava.io.IOException;
importjava.io.InputStream;

importjava.net.MalformedURLException;

importorg.apache.commons.httpclient.DefaultMethodRetryHandler;
importorg.apache.commons.httpclient.HostConfiguration;
importorg.apache.commons.httpclient.HttpClient;
importorg.apache.commons.httpclient.HttpStatus;
importorg.apache.commons.httpclient.methods.PostMethod;

/***//**
*
@authorlichunlei
*
*Tochangethetemplateforthisgeneratedtypecommentgoto
*Window>Preferences>Java>CodeGeneration>CodeandComments
*/

publicclassHttpServiceimplementsServiceInterface...{

privateHttpClienthttpClient=newHttpClient();

privateDefaultMethodRetryHandlerretryhandler=null;

privateStringurl=null;

staticintBASE_BODY_SIZE=10240;
staticintINC_BODY_SIZE=51200;

publicHttpService()throwsMalformedURLException...{
this.createMethodRetryHandler();
this.setHostConfiguration();
}


privatevoidcreateMethodRetryHandler()...{
retryhandler
=newDefaultMethodRetryHandler();
retryhandler.setRequestSentRetryEnabled(
true);
retryhandler.setRetryCount(
2);//retry2times
}


privatevoidsetHostConfiguration()throwsMalformedURLException...{
this.url=http://12.20.69.80:4080/Web/Servicelet;
Stringhost
="12.21.6.81";
intport=5080;

Stringprotocol
="http";

if(url!=null&&color: #000000
分享到:
评论

相关推荐

    用HttpClient来模拟浏览器GET POST

    正如前面说到的,如果我们自己使用java.net.HttpURLConnection来搞定这些问题是很恐怖的事情,因此在开始之前我们先要介绍一下一个开放源码的项目,这个项目就是Apache开源组织中的httpclient,它隶属于Jakarta的...

    HttpClient 4.0.3 Api 帮助文档 CHM格式

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际...

    jakarta.activation-api-1.2.1-API文档-中英对照版.zip

    赠送jar包:jakarta.activation-api-1.2.1.jar; 赠送原API文档:jakarta.activation-api-1.2.1-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.1-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...

    jakarta.servlet-api-4.0.4-API文档-中文版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    jakarta.validation-api-2.0.1-API文档-中英对照版.zip

    赠送jar包:jakarta.validation-api-2.0.1.jar; 赠送原API文档:jakarta.validation-api-2.0.1-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...

    jakarta.validation-api-2.0.1-API文档-中文版.zip

    赠送jar包:jakarta.validation-api-2.0.1.jar; 赠送原API文档:jakarta.validation-api-2.0.1-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.1-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...

    jakarta.validation-api-2.0.2-API文档-中文版.zip

    赠送jar包:jakarta.validation-api-2.0.2.jar; 赠送原API文档:jakarta.validation-api-2.0.2-javadoc.jar; 赠送源代码:jakarta.validation-api-2.0.2-sources.jar; 赠送Maven依赖信息文件:jakarta.validation...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    jakarta.activation-api-1.2.1-API文档-中文版.zip

    赠送jar包:jakarta.activation-api-1.2.1.jar; 赠送原API文档:jakarta.activation-api-1.2.1-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.1-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...

    jakarta.websocket-api-1.1.2-API文档-中文版.zip

    赠送jar包:jakarta.websocket-api-1.1.2.jar; 赠送原API文档:jakarta.websocket-api-1.1.2-javadoc.jar; 赠送源代码:jakarta.websocket-api-1.1.2-sources.jar; 赠送Maven依赖信息文件:jakarta.websocket-api...

    jakarta.activation-api-1.2.2-API文档-中英对照版.zip

    赠送jar包:jakarta.activation-api-1.2.2.jar; 赠送原API文档:jakarta.activation-api-1.2.2-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.2-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...

    jakarta commons-API

    jakarta commons的API

    jakarta.annotation-api-1.3.5-API文档-中英对照版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    HttpClient API CHM

    HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache...

    jakarta-servletapi-5.rar

    jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar

    jakarta.servlet-api-4.0.4-API文档-中英对照版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    jakarta.activation-api-1.2.2-API文档-中文版.zip

    赠送jar包:jakarta.activation-api-1.2.2.jar; 赠送原API文档:jakarta.activation-api-1.2.2-javadoc.jar; 赠送源代码:jakarta.activation-api-1.2.2-sources.jar; 赠送Maven依赖信息文件:jakarta.activation...

    Jakarta POI API

    Jakarta POI API.解析MS Office文档

    jakarta.websocket-api-1.1.2-API文档-中英对照版.zip

    赠送jar包:jakarta.websocket-api-1.1.2.jar; 赠送原API文档:jakarta.websocket-api-1.1.2-javadoc.jar; 赠送源代码:jakarta.websocket-api-1.1.2-sources.jar; 赠送Maven依赖信息文件:jakarta.websocket-api...

    jakarta.el-3.0.3-API文档-中英对照版.zip

    包含翻译后的API文档:jakarta.el-3.0.3-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.glassfish:jakarta.el:3.0.3; 标签:glassfish、jakarta、el、中英对照文档、jar包、java; 使用方法:解压...

Global site tag (gtag.js) - Google Analytics