定义一个抽象类

package httpclientfactory;import org.testng.annotations.Test;/*** @Author: ws* @Description:* @Date: Created in 10:44 2018/11/2* @Modified By:*/
public abstract class AbstractHttpClient {/** @Description:这是关于httpclient的三种请求方式执行的基本url方法** @param: [url]* @return: java.lang.String*/abstract String execute(String url);/** @Description:分别对Get,Post的请求传参,Get没有参数,Post含有参数** @param: [params]* @return: java.lang.Object*/abstract AbstractHttpClient setParams(Object params);}

Get,post请求继承该抽象类

Get请求

package httpclientfactory;import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class HttpclientGet extends AbstractHttpClient {public  String execute(String url){CloseableHttpClient httpClient = null;HttpGet httpGet = null;try {httpClient = HttpClients.createDefault();//请求配置RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();//创建HttpGet实例httpGet = new HttpGet(url);//对HttpGet指定配置httpGet.setConfig(requestConfig);//启动httpget请求CloseableHttpResponse response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();String reponseInformation = EntityUtils.toString(entity,"UTF-8");return reponseInformation;} catch (IOException e) {e.printStackTrace();}finally {try {if (httpGet != null) {httpGet.releaseConnection();}if (httpClient != null ) {httpClient.close();}}catch (Exception e) {e.printStackTrace();}}return null;}@OverrideAbstractHttpClient setParams(Object params) {return null;}
}

Post请求

package httpclientfactory;import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class HttpClientPostForm extends AbstractHttpClient{/** HTTPCLIENT-POST请求:x-www-form-urlencoded  类型** */private Map<String, String> param;public  String execute(String url){CloseableHttpClient httpClient = null;HttpPost httpPost = null;try {httpClient = HttpClients.createDefault();//请求配置RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();//创建HttpPost实例httpPost = new HttpPost(url);//对HttpPost指定配置httpPost.setConfig(requestConfig);List<NameValuePair> ps = new ArrayList<>();for (String key : param.keySet()) {NameValuePair nv = new BasicNameValuePair(key,param.get(key));ps.add(nv);}UrlEncodedFormEntity requestEntity = new UrlEncodedFormEntity(ps);httpPost.setEntity(requestEntity);//启动httpPost请求CloseableHttpResponse response = httpClient.execute(httpPost);HttpEntity entity = response.getEntity();String reponseInformation = EntityUtils.toString(entity,"UTF-8");return reponseInformation;} catch (IOException e) {e.printStackTrace();}finally {try {if (httpPost != null) {httpPost.releaseConnection();}if (httpClient != null ) {httpClient.close();}}catch (Exception e) {e.printStackTrace();}}return null;}@OverrideAbstractHttpClient setParams(Object params) {param = (Map<String, String>) params;return this;}
}
package httpclientfactory;import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import java.io.IOException;public class HttpClientPostBody extends AbstractHttpClient{/** HTTPCLIENT-POST请求:APPLICATION_JSON类型数据** */private String body;public  String execute(String url){CloseableHttpClient httpClient = null;HttpPost httpPost = null;try {httpClient = HttpClients.createDefault();//请求配置RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();//创建HttpPost实例httpPost = new HttpPost(url);//对HttpPost指定配置httpPost.setConfig(requestConfig);
//            List<NameValuePair> ps = new ArrayList<>();
//            for (String key : params.keySet()) {
//                NameValuePair nv = new BasicNameValuePair(key,params.get(key));
//                ps.add(nv);
//            }//闯入的参数,传入的参数类型为"APPLICATION_JSON"StringEntity requestEntity = new StringEntity(body,ContentType.APPLICATION_JSON);httpPost.setEntity(requestEntity);//启动httpPost请求CloseableHttpResponse response = httpClient.execute(httpPost);HttpEntity entity = response.getEntity();String reponseInformation = EntityUtils.toString(entity,"UTF-8");return reponseInformation;} catch (IOException e) {e.printStackTrace();}finally {try {if (httpPost != null) {httpPost.releaseConnection();}if (httpClient != null ) {httpClient.close();}}catch (Exception e) {e.printStackTrace();}}return null;}@OverrideAbstractHttpClient setParams(Object params) {body = params.toString();return this;}
}

工厂测试类

package httpclientfactory;import org.testng.annotations.Test;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;/*** @Author: ws* @Description:* @Date: Created in 15:31 2018/11/2* @Modified By:*/
public class HttpClientFactory {/** @Description:** @param: [type]* @return: httpclientfactory.AbstractHttpClient*/public static AbstractHttpClient create(String type){switch (type){case "get":return new HttpclientGet();case "postForm":return new HttpClientPostForm();case "postBody":return new HttpClientPostBody();default:return null;}}/** @Description:** @param: []* @return: void*/@Testpublic void test(){//Get请求测试String get = HttpClientFactory.create("get").execute("http://v.juhe.cn/weather/index?format=2&cityname=北京&key=9679a0703822fe67b9cff961ba197b02");System.out.println(get);//Post请求测试Map<String,String> map = new HashMap<>();map.put("subject","4");map.put("model","a1");map.put("testType","order");map.put("key","5d5d6091ba01de0c27e84b4ab2fca5df");String s1 = HttpClientFactory.create("postForm").setParams(map).execute("http://v.juhe.cn/jztk/query");//String s1=post("http://v.juhe.cn/jztk/query",map);System.out.println(s1);}
}

接口自动化第四篇----应用工厂模式下的HttpClient请求相关推荐

  1. python接口自动化(四十)- logger 日志 - 下(超详解)

    简介 按照上一篇的计划,这一篇给小伙伴们讲解一下:(1)多模块使用logging,(2)通过文件配置logging模块,(3)自己封装一个日志(logging)类.可能有的小伙伴在这里会有个疑问一个l ...

  2. 利用Qt元对象技术防止工厂模式下代码臃肿问题,QT 动态创建对象(第2种方法)

    问题的提出: 近来要编写一个仿真液压.电力.机械的软件,如下为液压的: 可以看到液压图中很多液压元器件,这些元器件的id.名称等都是从json配置文件读取的,配置文件格式如下: {"Clas ...

  3. 【Java设计模式 设计模式与范式】创建型模式 四:抽象工厂模式

    本篇Blog继续学习创建型模式,创建型模式的主要关注点是怎样创建对象,它的主要特点是将对象的创建与使用分离,这样可以降低系统的耦合度,使用者不需要关注对象的创建细节.本篇学习的是抽象工厂模式.由于学习 ...

  4. 设计模式(四)简单工厂模式

    首先,简单工厂模式不属于23中涉及模式,简单工厂一般分为:普通简单工厂.多方法简单工厂.静态方法简单工厂. 1.简单工厂模式简介 定义 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单 ...

  5. soapui工具_python接口自动化(四)--接口测试工具介绍(详解)

    简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...

  6. python接口自动化(四)--接口测试工具介绍(详解)

    简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...

  7. 《Head First设计模式》第四章笔记 工厂模式

    之前我们一直在使用new操作符,但是实例化这种行为并不应该总是公开的进行,而且初始化经常会造成耦合问题,工厂模式将摆脱这种复杂的依赖,本次内容包括简单工厂,工厂方法和抽象工厂三种情况. 1 2 3 4 ...

  8. 设计模式之(四)抽象工厂模式(Abstract Factory)

    工厂模式已经分析了简单工厂模式和工厂方法模式.并且了解了工厂方法模式去简单工厂模式的延伸,工厂方法模式如果不把工厂类抽象的话,就是简单工厂模式.由前面两个工厂模式可以猜测出抽象工厂模式应该是这两种工厂 ...

  9. java接口自动化(四) - 企业级代码管理工具Git的应用

    1.简介 首先我们自己需要将自己的代码上传到GitHub上边做好备份.用来避免万一由于某些不可控的非人为因素或者人为因素造成的代码丢失.而且GitHub是一个开源的代码管理工具.所以宏哥这里再次介绍一 ...

  10. 《Head First 设计模式》(四):工厂模式

    1.简单工厂模式 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 注意: 实际上简单工厂不是一个设计模式,更多程度上比较像一种编程习惯. 结构图: Factory ...

最新文章

  1. 《深度探索C++对象模型》--1 关于对象
  2. Xilinx FPGA GTX的DRP速率配置详解
  3. script标签属性用type还是language?
  4. “SQL 被低估了!”
  5. windows7原版iso镜像_一定收藏,常用操作系统原版下载地址整理,Win7 Win10 Deepin...
  6. Spring boot - 整合MyBatis
  7. VMware 修复 Workstation、Fusion 和 ESXi中的多个漏洞
  8. 可视化Web报表设计器-FastReport Online Designer简介
  9. 自定义Android中Dialog的弹出动画
  10. java monitor 翻译_Java 对象锁与monitor的区别
  11. 秒懂设计模式之桥接模式(Bridge Pattern)
  12. 华硕天选3笔记本电脑WiFi功能消失
  13. JSON 解析嵌套json字符串,一个json字符串中嵌套另一个json字符串 (附解析代码)
  14. “字体arial不支持样式regular“的解决方法
  15. 网络爬虫的“盗亦有道”
  16. 计算机怎么搜索特定格式文件,win10 查找指定类型文件方法_win10怎么查找指定类型文件-win7之家...
  17. 世界海洋日 | TcaplusDB号召你一同保护海洋生物多样性
  18. java poi 段落行间距,Apache POI Word - 段落( Paragraph)
  19. 面对同行抄袭或者抹黑,应该怎么办?
  20. Android9.0新特性

热门文章

  1. tensorflow2.0自制神经网络数据集及预测结果(混淆矩阵)可视化
  2. android 5 root super su,针对Supersu也root不了手机的root详细使用教程
  3. 2022年湖北省住建厅特种作业操作证怎么报考?甘建二
  4. 生活杂谈-简单电器维修知识-2
  5. 如何下载网页中的视频成mp4格式
  6. 管理软件软件开发_管理在软件开发中的作用
  7. TangIDE游戏开发之70行代码实现打地鼠
  8. js进行txt文件下载方式或oss文件访问下载跨域解决
  9. 艺体计算机教师考核细则,音体美教师考核办法
  10. 6款反垃圾邮件产品横向比较测试