摘至:http://hi.baidu.com/xbnh0217/blog/item/b1feee321e162549ad4b5f8d.html
package com.bonck.service.cook;
import java.io.IOException;
import java.util.HashMap;
import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.DefaultMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import com.bonck.util.LogService;
public class CommonParserTest {
/**
* 此登录需要验证码
* 这里开始登陆
* map 参数设置
* String url 登陆地址
* String code 验证码名字
* String vcode 验证码
* String uname 用户名 实参
* String upwd 密码 实参
* String username 用户名名字
* String password 用户名名字
* String hosturl cook这只url
* String encode 编码种类 gb2312 utf-8
* 登录入口并返回Map 存有client信息和cookie信息
* @return
*/
public HashMap vlogin(HashMap sm) {
//String url, String vcode,String usrName,String pwd
HashMap map=new HashMap();
HttpClient client = new HttpClient();
// 设置请求时间
client.getParams().setConnectionManagerTimeout(10000l);
client.getHostConfiguration().setHost("www.myshida.com", 80, "http");
// 获得PostMethod 对象 并设置参数
String loginUrl=sm.get("url")+"";
PostMethod post = new PostMethod("http://www.myshida.com/club/logging.php?action=login" );
// 设置登录参数
NameValuePair[] para = new NameValuePair[] {
new NameValuePair("username", "liuxue"),
new NameValuePair("password", "liuxue123456") ,
new NameValuePair("loginfield", "username")
// new NameValuePair("formhash", "2a8c1766"),
//
// new NameValuePair("referer", "index.php"),
// new NameValuePair(sm.get("vcode")+"", (sm.get("code")+"")
//验证码
};
// 将参数设置到也面中
post.setRequestBody(para);
// 设置请求参数 默认请求三次
post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultMethodRetryHandler());
// Httpclient 对于接受后继服务的请求,象post和put等不能自动转发
// 正确状态码是 SC_OK =200 301 302
// 获得状态码
try {
int status = client.executeMethod(post);
//HttpStatus.SC_OK
if (status == 302) {
Header locationHeader = post.getResponseHeader("location");
String location = null;
if (locationHeader != null) {
location = locationHeader.getValue();
System.out
.println("the Page was redirected to " + location);
} else {
System.out.println("this location was null");
}
}
else if(status==HttpStatus.SC_OK){
// 读取相应信息
byte[] r = post.getResponseBody();
//转码 获取相应的数据
String content = new String(r,"gb2312");
// LogService.info("-------------------------------****************");
LogService.info(content);
Cookie[] cookie = client.getState().getCookies();
// 将cook设置到client里面
client.getState().addCookies(cookie);
// 设置释放链接
post.releaseConnection();
map.put("cookie", cookie);
map.put("client", client);
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
/**
* 该登陆不需要验证码
* 这里开始登陆
* map 参数设置
* String url 登陆地址
* String uname 用户名 实参
* String upwd 密码 实参
* String username 用户名名字
* String password 用户名名字
* String hosturl cook这只url
* String encode 编码
* 登录入口并返回Map 存有client信息和cookie信息
* @return
*/
@SuppressWarnings("unchecked")
public HashMap login(HashMap sm) {
//String url, String vcode,String usrName,String pwd
HashMap map=new HashMap();
HttpClient client = new HttpClient();
// 设置请求时间
client.getParams().setConnectionManagerTimeout(5000l);
client.getHostConfiguration().setHost(sm.get("hosturl")+"", 80, "http");
// 获得PostMethod 对象 并设置参数
PostMethod post = new PostMethod( sm.get("url")+"");
// 设置登录参数
NameValuePair[] para = new NameValuePair[] {
new NameValuePair(sm.get("username")+"", sm.get("uname")+""),
new NameValuePair(sm.get("password")+"", sm.get("upwd")+"")
//, new NameValuePair(sm.get("code")+"", (sm.get("vcode")+""))//验证码
};
// 将参数设置到也面中
post.setRequestBody(para);
// 设置请求参数 默认请求三次
post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultMethodRetryHandler());
// Httpclient 对于接受后继服务的请求,象post和put等不能自动转发
// 正确状态码是 SC_OK =200 301 302
// 获得状态码
try {
int status = client.executeMethod(post);
if (status == HttpStatus.SC_OK) {
Header locationHeader = post.getResponseHeader("location");
String location = null;
if (locationHeader != null) {
location = locationHeader.getValue();
String st=new String(location.getBytes(),"gb2312");
System.out
.println("the Page was redirected to " + st);
} else {
System.out.println("this location was null");
}
// 读取相应信息
byte[] r = post.getResponseBody();
//转码 获取相应的数据
String content = new String(r, sm.get("encode")+"");
LogService.info("-------------------------------****************");
LogService.info(content);
Cookie[] cookie = client.getState().getCookies();
// 将cook设置到client里面
client.getState().addCookies(cookie);
// 设置释放链接
post.releaseConnection();
map.put("cookie", cookie);
map.put("client", client);
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
/***************************************************************************
* @version 1.0
* 主要用来爬取要爬的信息
* 根据网址对页面信息进行采集
* @param url 指定爬去的网页
* @param map client客户端 cookie Cookie信息
* @param ,String encoding 对内容进行编码转换
* @return
*/
public String getContentByParser(String url,HashMap map,String encoding) {
HttpClient client=(HttpClient)map.get("client");
Cookie []cookie=(Cookie[])map.get("cookie");
GetMethod get=new GetMethod(url);
get.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultMethodRetryHandler());
//设置cookie
get.setRequestHeader("Cookie",cookie.toString());
String content = null;
try {
int statusCode=client.executeMethod(get);
if(statusCode==HttpStatus.SC_OK){
byte[] responseBody = get.getResponseBody();
content = new String(responseBody, encoding);//对内容进行编码转换
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
public static void main(String[] args) {
String url="";
String username="";
String pwd="";
CommonParserTest test=new CommonParserTest();
HashMap map=new HashMap();
test.vlogin(map);
}
}
分享到:
相关推荐
标题中的“httpclient测试请求方法”指的是使用Apache HttpClient库进行HTTP请求的方法。HttpClient是一个功能强大的客户端编程工具包,它允许开发者构建复杂的HTTP客户端应用程序。在本文中,我们将深入探讨...
### httpclient 测试登录并提交表单功能 #### 概述 本文将详细介绍如何使用Apache HttpClient库进行模拟登录以及提交表单数据的操作。通过一个具体的示例程序来演示这一过程,帮助读者理解整个流程。 #### 使用...
总之,HttpClient是一个功能强大、灵活的测试工具,适用于Java开发人员进行web接口的调试和测试。通过熟练掌握HttpClient的使用,不仅可以提升测试效率,还能深入理解HTTP协议及其在网络通信中的应用。在实际工作中...
测试httpclient,主要测试json参数的接口,包括get请求和post请求。
可以用作测试例子 测试流传输的接口需要用到,HTTPClient,jar包
本篇文章将详细讲解如何利用HttpClient上传文件到测试服务器,这在进行API测试、自动化测试或者集成测试时非常有用。我们先来理解一下HttpClient的基本概念,然后逐步探讨文件上传的步骤。 HttpClient是由Apache...
本篇文章将深入探讨"Httpclient简单测试程序"这一主题,以及如何使用它来与服务器进行通信。 首先,HTTPClient是Apache HttpClient库的简称,它是Apache软件基金会提供的一个开源项目,主要用于构建HTTP客户端应用...
本示例将探讨如何利用Apache HttpClient库与TestNG框架进行接口测试,以提高测试效率和准确性。 Apache HttpClient是一个开源Java库,允许开发者发送HTTP请求并接收响应,支持多种HTTP协议版本,包括HTTP/1.1和...
HttpClient.Helpers 阶段 CI NuGet 生产 发展历程 使用System.Net.Http.HttpClient代码将尝试实际调用/命中该Http端点。 为了防止在单元测试中发生这种情况,此代码库中提供了一些简单的帮助程序。 关键点 :...
本书以testng、httpclient和selenium.appium为技术核心,详细介绍了如何进行端到端的自动化测试。下面将分别阐述这些工具在自动化测试中的作用及其相关知识点。 TestNG是一款强大的测试框架,它继承了JUnit的优点并...
这个测试工具能处理JSON数据,意味着它可以方便地构造JSON格式的请求体,并解析返回的JSON响应,这对于测试API接口尤其是RESTful API至关重要。 接着,我们谈谈签名和MD5加密解密。签名通常用于确保数据的完整性和...
基于jmeter+Java+HttpclientUtil实现的接口测试工具,通过Excel表格进行维护接口相关参数信息,借助Jmeter工具通过java请求设计接口测试自动化测试用例。代码重写了JavaSampleClient类,在使用过程中取出了冗余的...
这个库广泛用于从Web服务器获取数据、发送请求、处理响应等任务,尤其在爬虫、API交互、自动化测试等领域有着广泛的应用。在本文中,我们将深入探讨HttpClient的核心概念、使用方法以及如何通过`httpclient.jar`进行...
在升级过程中,程序员需要对新库进行充分的测试,以确保兼容性和性能不会受到影响。 综上所述,升级到HttpComponents HttpClient 4.x是一个复杂的过程,涉及到对新API的深入学习,理解新的编程模型和网络编程的优化...
这个实例主要涉及如何配置HttpClient来忽略SSL(Secure Socket Layer)验证,这对于在开发和测试环境中处理自签名证书或未认证的服务器非常有用。以下将详细介绍HttpClient的使用以及如何进行SSL验证的忽略。 首先...
在Java应用中,HttpClient常用于网页抓取、API调用以及自动化测试等场景。 本压缩包文件"httpClient"很可能包含了HttpClient库所需的必备JAR文件,这些文件通常包括HttpClient的核心库、依赖的第三方库以及可能的...
Java HttpClient 是一个强大的HTTP客户端库,它允许Java开发者在应用程序中发送HTTP请求并接收响应,广泛应用于Web服务的调用、API接口测试以及自动化脚本等场景。在Java项目中,使用HttpClient可以实现与Web服务器...
在Java应用程序中,HttpClient常用于Web服务的调用、数据抓取或自动化测试等场景。 HttpClient的核心特性包括: 1. **请求构造与执行**:HttpClient允许开发者精确控制HTTP请求的每一个细节,如方法类型(GET、...
HttpClient 4.5 提供了丰富的测试用例,这些用例覆盖了各种常见场景,可以帮助开发者理解 HttpClient 的工作原理和正确用法。通过分析这些测试用例,我们可以更深入地了解 HttpClient 的功能和限制。 总结,...
HttpClient是Apache软件基金会的一个开源项目,它为Java开发者提供了一个...这些特性使得HttpClient成为Java开发者进行HTTP通信的强大工具,无论是在Web服务调用、爬虫开发还是自动化测试等领域,都能发挥重要作用。