热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java模拟getpost请求_Java后台模拟发送http的get和post请求,并测试

个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T

个人学习使用:谨慎参考

1 Client类

import com.thoughtworks.gauge.Step;

import com.thoughtworks.gauge.Table;

import com.thoughtworks.gauge.TableRow;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* Created by KSC on 2/7/2017.

*/

public class testClient {

//send get request

/**

*

* @param url destination address

* @param parametersTable request parameters

* @return remote response result

*/

@Step("the get method url is and parameters are ")

public static String sendGet(String url,Table parametersTable){

Map parameters &#61; new HashMap<>();

for(TableRow row : parametersTable.getTableRows()){

String key &#61; row.getCell("name");

String value &#61; row.getCell("age");

parameters.put(key,value);

}

for (String s: parameters.keySet()){

System.out.println(s&#43;"\t"&#43;parameters.get(s));

}

String result &#61; "";//返回的结果

BufferedReader in &#61; null;//读取响应的输入流

StringBuffer sf &#61; new StringBuffer();//存储参数

String params &#61; "";//编码后的参数

try{

if (parameters.size() &#61;&#61; 1){

for(String name : parameters.keySet()){

sf.append(name).append("&#61;").append(

java.net.URLEncoder.encode(parameters.get(name),"UTF-8")

);

}

params &#61; sf.toString();

}else{

for(String name : parameters.keySet()){

sf.append(name).append("&#61;").append(

java.net.URLEncoder.encode(parameters.get(name),"UTF-8")

).append("&");

}

String tempParams &#61; sf.toString();

params &#61; tempParams.substring(0,tempParams.length()-1);

System.out.println(params);

}

String fullUrl &#61; url &#43; "?" &#43; params;

System.out.println(fullUrl);

//创建URL对象

URL connUrl &#61; new URL(fullUrl);

//打开URL链接

HttpURLConnection httpConn &#61; (HttpURLConnection)connUrl.openConnection();

// 设置通用属性

httpConn.setRequestProperty("Accept","*/*");

httpConn.setRequestProperty("Connection","Keep-Alive");

httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");

//建立实际链接

httpConn.connect();

//响应头部的获取

Map> headers &#61; httpConn.getHeaderFields();

System.out.println("&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");

//遍历头部所有字段

for(String key : headers.keySet()){

System.out.println(key&#43;"\t: \t"&#43;headers.get(key));

}

//定义bufferedReader输入流来读取URL的响应&#xff0c;并设置编码方式

in &#61; new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));

String line &#61; "";//读取返回的内容

while((line &#61; in.readLine()) !&#61; null){

result &#61; result&#43;line;

}

}catch(Exception e){

e.printStackTrace();

}finally{

try{

if(in !&#61; null){

in.close();

}

}catch(IOException ex){

ex.printStackTrace();

}

}

System.out.println("*****************************");

System.out.println(result);

System.out.println("&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");

return result;

}

//send post request

&#64;Step("the post method url is and parameters are ")

public static String sendPost(String url,Table parametersTable){

Map parameters &#61; new HashMap<>();

for(TableRow row : parametersTable.getTableRows()){

String key &#61; row.getCell("name");

String value &#61; row.getCell("age");

parameters.put(key,value);

}

for (String s: parameters.keySet()){

System.out.println(s&#43;"\t\t"&#43;parameters.get(s));

}

System.out.println("---------------------");

String result &#61; "";

BufferedReader in &#61; null;

PrintWriter out &#61; null;//

StringBuffer sf &#61; new StringBuffer();

String params &#61; "";

try{

if (parameters.size() &#61;&#61; 1){

for(String name : parameters.keySet()){

sf.append(name).append("&#61;").append(

java.net.URLEncoder.encode(parameters.get(name),"UTF-8")

);

}

params &#61; sf.toString();

}else{

for(String name : parameters.keySet()){

sf.append(name).append("&#61;").append(

java.net.URLEncoder.encode(parameters.get(name),"UTF-8")

).append("&");

}

String tempParams &#61; sf.toString();

params &#61; tempParams.substring(0,tempParams.length()-1);

}

URL connUrl &#61; new URL(url);

HttpURLConnection httpConn &#61; (HttpURLConnection)connUrl.openConnection();

httpConn.setRequestProperty("Accept","*/*");

httpConn.setRequestProperty("Connection","Keep-Alive");

httpConn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");

//设置post方式

httpConn.setDoInput(true);

httpConn.setDoOutput(true);

//获取HttpUrlConnection对象对应的输出流

out &#61; new PrintWriter(httpConn.getOutputStream());

//发送请求参数

out.write(params);

//flush(冲洗)输出流中的缓冲

out.flush();

in &#61; new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));

String line &#61; "";

while((line &#61; in.readLine()) !&#61; null){

result &#61; result&#43;line;

}

}catch(Exception e){

e.printStackTrace();

}finally{

try{

if(out !&#61; null){

out.close();

}

if(in !&#61; null){

in.close();

}

}catch(IOException e){

e.printStackTrace();

}

}

System.out.println("*****************************");

System.out.println(result);

System.out.println("&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;");

return result;

}

}

2.测试类

用自动化测试工具gauge进行测试

Use http request for creating user

&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;

Created by KSC on 2/7/2017

This is an executable specification file which follows markdown syntax.

Every heading in this file denotes a scenario. Every bulleted point denotes a step.

call on url with method get

----------------

tags: get

*the get method url is "http://localhost:8080" and parameters are

|name|age|

|----|---|

|tom|20|

|maike|22|

call on url with method post

---------------------------

tags: post

*the post method url is "https://www.baidu.com/" and parameters are

|name|age|

|----|---|

|marry|20|

|rose|22|



推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
我是奥特曼8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有