似水流年梦 2019-12-20
HttpClient是模拟Http协议客户端请求的一种技术,可以发送Get/Post等请求,要使用首先需要在pom文件中引入依赖包。
1.pom文件中引入依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>2.第一个demo
public class Demo1 {
@Test
public void test1() throws ClientProtocolException, IOException {
String result;
HttpGet get = new HttpGet("http://www.baidu.com");
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(get);
result=EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(result);
}
}3.mock框架mock请求
[
{
"description":"这是一个会返回cookies信息的get请求",
"request":{
"uri":"/getCookies",
"method":"get"
},
"response":{
"cookies":{
"login":"true"
},
"text":"恭喜你获得cookies信息成功"
}
},
{
"description":"这是一个要携带cookies信息才能访问的get请求",
"request":{
"uri":"/getWithCookies",
"method":"get",
"cookies":{
"login":"true"
}
},
"response":{
"text":"这是一个要携带cookies信息才能访问的get请求"
}
},
{
"description":"模拟带cookies的post请求",
"request":{
"uri":"/postWithCookies",
"method":"post",
"cookies":{
"login":"true"
},
"json":{
"name":"huhansan",
"age":"18"
}
},
"response":{
"status":200,
"json":{
"huhansan":"success",
"status":"1"
}
}
}
]4.将相关参数写入配置文件application.properties
test_url=http://localhost:8888 getCookies_uri=/getCookies getWithCookies_uri=/getWithCookies postWithCookies_uri=/postWithCookies
5.需要携带cookie才能访问的get请求
public class TestGetCookies {
private ResourceBundle bundle;
private CookieStore cs;
private String url;
@BeforeTest
public void beforeTest() {
bundle=ResourceBundle.getBundle("application");
url=bundle.getString("test_url");
}
@Test
public void getCookies() throws ClientProtocolException, IOException {
String uri=bundle.getString("getCookies_uri");
HttpGet get = new HttpGet(url+uri);
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(get);
String result=EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(result);
//获取cookies信息
cs = client.getCookieStore();
List<Cookie> cookies = cs.getCookies();
for(Cookie c:cookies) {
String name=c.getName();
String value=c.getValue();
System.out.println(name+":"+value);
}
}
@Test(dependsOnMethods = {"getCookies"})
public void getWithCookies() throws ClientProtocolException, IOException {
String uri=bundle.getString("getWithCookies_uri");
HttpGet get = new HttpGet(url+uri);
DefaultHttpClient client = new DefaultHttpClient();
//设置cookies信息
client.setCookieStore(cs);
HttpResponse response = client.execute(get);
//获取响应的状态码
int codes = response.getStatusLine().getStatusCode();
if (codes==200) {
String result = EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(result);
}
}
}6.需要携带cookies才能访问的post请求
public class TestPostCookies {
private ResourceBundle bundle;
private CookieStore cs;
private String url;
@BeforeTest
public void beforeTest() {
bundle=ResourceBundle.getBundle("application");
url=bundle.getString("test_url");
}
@Test
public void getCookies() throws ClientProtocolException, IOException {
String uri=bundle.getString("getCookies_uri");
HttpGet get = new HttpGet(url+uri);
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(get);
String result=EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(result);
//获取cookies信息
cs = client.getCookieStore();
List<Cookie> cookies = cs.getCookies();
for(Cookie c:cookies) {
String name=c.getName();
String value=c.getValue();
System.out.println(name+":"+value);
}
}
@Test(dependsOnMethods = {"getCookies"})
public void postWithCookies() throws ClientProtocolException, IOException {
String uri=bundle.getString("postWithCookies_uri");
HttpPost post = new HttpPost(url+uri);
DefaultHttpClient client = new DefaultHttpClient();
//添加post请求参数,用json传值,pom文件中引入json依赖
JSONObject json = new JSONObject();
json.put("name", "huhansan");
json.put("age", "18");
//设置请求头信息
post.setHeader("content-type", "application/json");
//将参数信息添加到方法中
StringEntity entity = new StringEntity(json.toString(), "utf-8");
post.setEntity(entity);
//设置cookies信息
client.setCookieStore(cs);
//发送请求
HttpResponse response=client.execute(post);
//接收响应信息
String result=EntityUtils.toString(response.getEntity(),"utf-8");
//将返回的响应结果字符串转化成为json对象
JSONObject resultJson = new JSONObject(result);
//获取响应结果值
String success=resultJson.getString("huhansan");
String status=resultJson.getString("status");
Assert.assertEquals("success", success);
Assert.assertEquals("1", status);
}
}7.启动mock应用,然后运行test方法,就可以正常返回信息
创建一个 HttpClient 实例,这个实例需要调用 Dispose 方法释放资源,这里使用了 using 语句。接着调用 GetAsync,给它传递要调用的方法的地址,向服务器发送 Get 请求。