热门标签 | 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|



推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 如何在窗口右下角添加调整大小的手柄
    本文探讨了如何在传统MFC/Win32 API编程中实现类似C# WinForms中的SizeGrip功能,即在窗口的右下角显示一个用于调整窗口大小的手柄。我们将介绍具体的实现方法和相关API。 ... [详细]
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社区 版权所有