centos模拟post请求_java模拟post和get请求(2019/10/25)

一、http含义的介绍
1.http协议是超文本传输协议--具体含义请百度
2.基于tcp/ip协议--注意和udp的区别
3.无状态---本次请求记不住以往请求的状态

4.无连接--每次连接只处理一个请求

5.媒体独立

二、请求报文的组成部分

5e9c70a279787f70c29d80906007ed0b.png

请求行 请求方式 请求url http协议版本

请求头

关于请求头和响应头的信息可以参考以下信息

https://www.cnblogs.com/yumo1627129/p/7941220.html

请求体

post编码方式

表格方式:application/x-www-form-urlencoded; charset=UTF-8

json格式:application/json

多媒体文件格式:multipart/form-data

三、java发送http请求(多种方式,目前只是用了一种方式,所以只记录一种)

第一种:使用httpUrlConnection对象

知识:
httpUrlConnection属性
// 设置连接超时时间
connection.setConnectTimeOut(15000);// 设置读取超时时间
connection.setReadTimeOut(15000);// 设置http的请求方式
connection.setRequestMethod("POST");// 设置http的header的信息,可参考《Java 核心技术 卷II》
connection.setRequestProperty("Connection", "Keep-Alive");// 设置是否向 httpUrlConnection 输出,
// 对于post请求,参数要放在 http 正文内,因此需要设为true。
// 默认情况下是false;
connection.setDoOutput(true);// 设置是否从 httpUrlConnection 读入,默认情况下是true;
connection.setDoInput(true);

请求的步骤

//第一步--获取httpUrlConnection的对象
//第二部--设置httpUrlConnection的属性
//第三步--获取读出输出流,写入信息给服务器outputstream
//第三步--获取输入流。获取服务器的信息 inputstream

方式一:

1.get请求:

  public static void testGetMethod(String httpUrl){URL url;HttpURLConnection conn = null;InputStream inputStream = null;try {1.创建对象url = new URL(httpUrl);conn = (HttpURLConnection) url.openConnection();2.设置参数conn.setDoInput(true);conn.setRequestMethod("GET");conn.setRequestProperty("Authorization","Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJOekU0WVdRd1pHRXRZVFZpWmkwME1tSmtMV0kzWXpRdE56STJPVEl6TWpjMFpqUTQifQ.MDnJHzEiLlNlwarfPeE8nExnGKfeNnSAprZcJdQMTBxrgePu1fe-0iE1ymn5hexs6xWRng1xJ9pP49QIlNZCIA");3.建立连接但是可以不显示调用connection。int responseCode = conn.getResponseCode();System.out.println(responseCode);if (responseCode ==200){String str="";StringBuffer stringBuffer = new StringBuffer();4.读取返回值inputStream = conn.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));while ((str =reader.readLine())!=null){stringBuffer.append(str);}//放到数组里System.out.println(stringBuffer);String[] split = Json.fromJsonAsArray(String.class,stringBuffer);System.out.println(split[0]);}} catch (Exception e) {e.printStackTrace();}finally {if (inputStream==null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (conn==null){conn.disconnect();}}}

2.post请求

表单类型:

public static void interfaceUntil(String path,String data){try {StringBuffer stringBuffer = new StringBuffer();1.创建对象URL url =new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();2.设置参数// 设置连接输出流为true,默认false (post请求是以流的方式隐式的传递参数)conn.setDoOutput(true);// 设置连接输入流为trueconn.setDoInput(true);// 设置请求方式为postconn.setRequestMethod("POST");// post请求缓存设为falseconn.setUseCaches(false);
//            // 设置该HttpURLConnection实例是否自动执行重定向
//            conn.setInstanceFollowRedirects(true);// 设置内容的类型,设置为经过urlEncoded编码过的from参数conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
//            conn.setRequestProperty("accept", "application/xml");
//            conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36");conn.setRequestProperty("Authorization","Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJaVFl3WkdVeVpUSXRabU13WXkwME1URmhMV0ptTURRdE1EWXhPR1ptWWpZMlpHSXkifQ.q2Yqzu-ZoXTMm3ZjT1Q4j8feXO2GB13ziZiSHQAc1_eAfFdMMVMaWrFA2VtC17WfDFTnCU7iMtky1bVgw30fZQ");//urlConnection的输入流
3.建立连接,可以不显示调用connection方法
4.创建输出函数,post请求体,字节流的形式OutputStream out = conn.getOutputStream();out.write(data.getBytes());out.flush();
5.创建输入流,读取接口写入的返回内容InputStream is = conn.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String str = "";while ((str = br.readLine()) != null) {stringBuffer.append(str);}System.out.println(stringBuffer);
//            Pager pager = new Pager();
//            System.out.println(pager);
//            System.out.println(pager.getPageSize());
//            System.out.println(pager.getPage());Pager pager = Json.fromJson(Pager.class, stringBuffer);System.out.println(pager);//关闭流is.close();conn.disconnect();System.out.println("完整结束");} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {//合并告警idLong alertId =9626414696700001L;StringBuffer stringBuffer = new StringBuffer();stringBuffer.append("alertId=");stringBuffer.append(alertId);stringBuffer.append("&");stringBuffer.append("pager={page:");stringBuffer.append("1");stringBuffer.append(",pageSize:");stringBuffer.append("2");stringBuffer.append("}");注意:以下的形式是不可以采用的必须是上面的表单形式
//        HashMap<String, Object> map = new HashMap<>();
//        map.put("alertId",alertId);
//        Pager pager = new Pager();
//        pager.setPage(1L);
//        pager.setPageSize(2L);
//        map.put("pager",pager);
//        System.out.println("传递的json数据:"+Json.toJson(map));interfaceUntil("http://192.168.101.244:16520/sap/alert/alertraw/pager",stringBuffer.toString());}

json类型:

 public static void testPostJson(String path,String data){try {URL url  = new URL(path);HttpURLConnection conn =(HttpURLConnection) url.openConnection();conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST");conn.setUseCaches(false);conn.setRequestProperty("Content-Type","application/json;charset=UTF-8");conn.setRequestProperty("Authorization","Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJNVFJtTmpreU5UVXROamd6TmkwMFpEVmtMV0V3TURNdE9UTTBOR1V5WWpCaU1XSXgifQ.pPvG67sbbZ-ZNVf8JAiHE6rzgb5nLPgCQgEOlMTYAx6eobB5tF3GnDHg6OwyYM4QPGPCSJ_0hZ0Qo1L1QbqtAQ");OutputStream os = conn.getOutputStream();os.write(data.getBytes());os.flush();
/*            //读取客户端响应,变成string答应InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);int str;char buff[] = new char[1024];while ((str = isr.read(buff)) != -1) {System.out.println(buff);}*/is.close();os.close();conn.disconnect();System.out.println("完整结束");} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {/*形式:"id":9575280686300014;代码:Map<String,String> dataMap = new HashMap<>();dataMap.put("id","9575280686300014");testPostJson("http://124.126.208.180:16520/sap/api/rest/alert/drill", Json.toJson(dataMap));*//*      形式{"pager":{"page":2,"pageSize":2}}
*/Pager pager = new Pager();pager.setPage(2L);pager.setPageSize(2L);testPostJson("http://124.126.208.180:16520/sap/api/rest/alert/getAlert",Json.toJson(pager));}

多媒体类型:

 public static void postFile(String urlPath, File file, Map<String,Object> valueMap){HttpURLConnection conn;InputStream inputStream;OutputStream outputStream;final String newLine = "rn";final String boundaryPrefix = "--";try {String BOUNDARY="----------"+System.currentTimeMillis();//参数分割线StringBuffer divider = new StringBuffer();divider.append(boundaryPrefix).append(BOUNDARY).append(newLine);//结尾// 定义最后数据分隔线,即--加上BOUNDARY再加上--。StringBuffer end = new StringBuffer();end.append(newLine).append(boundaryPrefix).append(BOUNDARY).append(boundaryPrefix);URL url = new URL(urlPath);conn = (HttpURLConnection) url.openConnection();conn.setDoInput(true);conn.setDoOutput(true);conn.setUseCaches(false);conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type","multipart/form-data;boundary="+ BOUNDARY);String fileName = null;String fileValue = null;/*** 开始传递非文件参数* 参数分割符号-content内容-两个空行-正文参数内容-结束标记*/StringBuffer stringBuffer = new StringBuffer();stringBuffer.append(divider);stringBuffer.append("Content-Disposition:form-data;name="fileId"");//两个空行stringBuffer.append(newLine);stringBuffer.append(newLine);//参数stringBuffer.append("789");stringBuffer.append(end);System.out.println("非文件上传参数"+stringBuffer);outputStream = conn.getOutputStream();outputStream.write(stringBuffer.toString().getBytes());/*开始文件上传*/StringBuilder sb = new StringBuilder();sb.append(divider);// 文件参数,photo参数名可以随意修改sb.append("Content-Disposition: form-data;name="file";filename="" + file.getName() + """);sb.append(newLine);sb.append(newLine);outputStream.write(sb.toString().getBytes());//开始输出文件FileInputStream fileInputStream = new FileInputStream(file);byte[] bytes = new byte[1024];int length;while ((length=fileInputStream.read(bytes)) !=-1){outputStream.write(bytes);}//结束符号outputStream.write(end.toString().getBytes());outputStream.flush();//读取响应inputStream = conn.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String str;if ((str = bufferedReader.readLine())!=null){System.out.println(str);}} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {File file = new File("D://wecenter//readme_first.html");HashMap<String, Object> map = new HashMap<>();map.put("fileId","123");System.out.println(file.exists());postFile("http://localhost:16520/test/upload",file,map);}

3.关于结果的处理

string类型: 使用reader读出来的本来就是string类型

数组,list类型:

712f4b1549e8c6e132c7bf9334e86c72.png

javabean对象:fastjson都可以这类的问题,目前使用的不是fastjson

b65ebc6f8a77fc67e2b413e98fb47833.png

三、胡思乱想记录中

1.为什么不能直接使用objectOutputStream直接序列化输出结果?

objectOutputstream需要写入和写出的版本号一致,这边很明显没有版本号可以用。

2.fastjson的相关知识有待总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浙江计算机二级报名步骤,浙江2016年9月计算机二级考生报名流程

导读&#xff1a;2016年9月浙江全国计算机二级考试网上报名时间为2016年6月1日-6月19日;现场缴费确认为6月1日6月20日&#xff0c;具体报名流程请看如下信息。想了解更多相关信息请持续关注我们应届毕业生考试网!(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#…

单开双控_卧室或者楼梯灯怎么安装单联双控

点击上面蓝色字体关注&#xff01;装修图例 | 别墅装修 | 装潢装饰 | 样板楼梯 | 装修设计在改电和布线前我们在这两个开关之间预埋3根线就够了。如果一头接电源&#xff0c;另一头接控制线的话&#xff0c;预埋2根线就够了&#xff0c;双控开关有三个接线柱&#xff0c;只要记…

Apache Ignite变得简单:第一个Java应用程序

在本文中&#xff0c;我们将更进一步&#xff0c;让您完成第一个Ignite应用程序的创建&#xff0c;以从分布式缓存中进行读写操作。 作为第一个示例&#xff0c;我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数据的应用程序。 可从GitHub存储库&#xf…

华测数据导出方法_输电线路塔基测量成图方法研究与应用

1.前言塔基测量成图软件是EATool第一个电力勘测模块&#xff0c;也是笔者个人刚参加工作时开发的第一个与工作直接相关的软件。该模块开发开始于2010年&#xff0c;于2012基本成型。记得第一次参加线路工程终勘定位&#xff0c;对于老员工的塔基断面测量模式有着诸多疑惑&#…

MQ在计算机组成,[转载]计算机组成框图-计算机运行流程(例子)

计算机组成框图-计算机运行流程ACC(Accumulator)&#xff1a; 累加器MQ(Multiplier-Quotient Register)&#xff1a;乘商寄存器ALU&#xff1a;算术逻辑单元X&#xff1a;操作数寄存器CU&#xff1a;控制单元IR(Instruction Register)&#xff1a;指令寄存器(用于存放当前指令)…

计算机硬盘怎么设置ntfs,Windows7系统如何把磁盘格式转换为NTFS的方法

今天朋友匆匆忙忙来找我&#xff1a;他的电脑因为某种情况&#xff0c;需要吧磁盘转换成ntfs格式&#xff0c;该怎么转换?Win7系统、利用系统自带工具转换1.我们打开我们的电脑磁盘&#xff0c;大家发现小编的电脑G盘是FAT32格式的&#xff0c;小编现在要把G盘转换为NTFS格式。…

ace unlck工具下载_压缩工具:WinRAR 曝出代码执行漏洞,该升级了

作为享誉全球的装机必备工具&#xff0c;「压缩软件」这四个字基本可以认为是 WinRAR 的专有名字了。只要有 PC 的地方&#xff0c;几乎都能看到 WinRAR 的身影。不过这款软件最近却被曝出了一个有19年历史的代码执行漏洞。WinRAR 宣称在全球拥有超过5亿的用户&#xff0c;目前…

关于计算机航天生物的想像作文,未来的航天器想象作文750字

未来的航天器想象作文750字到了2999年&#xff0c;人类发明出了一种新型的航天器。这种航天器机身类似我们现在的轿车&#xff0c;机身长10米&#xff0c;高度最高达4&#xff0c;最低达0.5米&#xff0c;材料是来自外星的软体金属&#xff0c;上面有一条会发光的物体&#xff…

哈罗单车怎么关锁还车_记者体验临沂共享单车定点还车 停错地方关不上锁

共享单车在给市民出行带来便利的同时&#xff0c;也引发了停放秩序混乱、妨碍市民通行等问题&#xff0c;为规范共享单车停放&#xff0c;兰山区在临沂市率先试点共享单车定点停放&#xff0c;并在特定区域施划共享单车定点停放区。据悉&#xff0c;临沂市兰山区第一批272个共享…

工业机器人 答案 韩建海_中国将连续8年成为工业机器人第一大市场,还将持续多久?...

2020年&#xff0c;中国工业机器人销售量&#xff0c;将会由负转正&#xff0c;销量预计再次突破15万台。2019年&#xff0c;约为14.4万台的销量。2013年——2020年中国工业机器人销量这已经是第八个年头&#xff0c;中国位居全球工业机器人销量第一大市场。工业机器人打磨工作…

java命令行参数工具_Java方法中的参数太多,第8部分:工具

java命令行参数工具在我的系列文章的前七篇文章中&#xff0c;有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上。 在本系列的第八篇文章中&#xff0c;我将介绍一些工具&#xff0c;这些工具可帮助您确定可能存在过多参数的情况&am…

工具 每分钟_black: 一个不妥协的Python代码格式化工具

代码可读性是评判代码质量的标准之一&#xff0c;有一个衡量代码质量的标准是 Martin 提出的 “WFT” 定律&#xff0c;即每分钟爆出 “WTF” 的次数。你在读别人代码或者做 Code Review 的时候有没有 “WTF” 冲动呢&#xff1f;为了帮助开发者统一代码风格&#xff0c;Python…

使用Spring Rest和Spring Data JPA和H2以及Spring Boot示例的Restful API

你好朋友&#xff0c; 在本教程中&#xff0c;您将学习以下内容&#xff1a; 1.在Spring Boot中配置Spring Rest&#xff0c;Spring Data JPA和H2 2.使用Spring Boot创建Springful服务端点的Spring Rest&#xff0c;Spring Data JPA和H2的示例 3.使用Swagger测试Restful端点…

计算机IP地址pin,打印机的ip地址在机身上哪里,打印机的pin在哪看

打印机的ip地址在机身上哪里&#xff0c;打印机的pin在哪看时间&#xff1a;2021-04-19 10:38:04打印机是我们日常工作中必备的公办用品&#xff0c;但是对于刚接触打印机的电脑小白来说&#xff0c;打印机的网络设置可不简单&#xff0c;比如IP地址、pin码&#xff0c;他们可能…

开机启动失败_电脑常见开机引导错误的解决方法

电脑在开机启动过程中&#xff0c;经常会出现开机失败的故障&#xff0c;开机失败比较常出现在开机引导项错误的问题上&#xff0c;比如引导文件没了&#xff0c;硬盘有问题等等&#xff0c;有些小问题重启几遍可以解决&#xff0c;有些问题就只能修复。这边小编跟大家整理分享…

2020非全日计算机博士,在职攻读博士是不是非常难,免考在职博士和非全日博士有什么不同...

博士的含金量我们自然不容忽视&#xff0c;但博士又不是说三天打鱼两天晒网就可搞定的&#xff0c;都是要经过长久的沉淀以及耐心才能坚持下来的&#xff0c;博士少说也要读个四到五年方可毕业&#xff0c;但也有个别优秀的三年内就完成学业待着自己的成功找到了丰厚的薪资待遇…

创建二级索引_Mysql创建索引

零:文章概要这篇文章&#xff0c;主要是和大家一起去了解 索引&#xff0c;然后一起使用CREATE INDEX语法给数据库中的表创建一个索引。一&#xff1a;先拿电话薄做个类比假如&#xff0c;一个电话薄里面包含了一个城市的所有人的姓名和电话号码。那么&#xff0c;想找到Bob Ca…

转hdmi_苹果本轻松接大屏,毕亚兹雷电接口转HDMI/VGA转换器评测

作为上班族&#xff0c;日常开会加出差&#xff0c;经常需要用到笔记本连接投影仪投屏。很多小伙伴为了高效办公&#xff0c;使用的都是性能强劲但是设计轻薄的笔记本产品&#xff0c;最常见的就是苹果笔记本。但是比较尴尬的是&#xff0c;目前可以使用的绝大部分苹果笔记本电…

使用Java流查询数据库

在本文中&#xff0c;您将学习如何编写纯Java应用程序&#xff0c;这些应用程序能够处理现有数据库中的数据&#xff0c;而无需编写单行SQL&#xff08;或类似的语言&#xff0c;例如HQL&#xff09;&#xff0c;也无需花费数小时将所有内容放在一起。 准备好应用程序之后&…

2017计算机信息技术,2017年一级计算机信息技术及应用考试试题级答案[权威资料]...

2017年一级计算机信息技术及应用考试试题级答案 本文档格式为WORD,感谢你的阅读。最新最全的 学术论文 期刊文献 年终总结 年终报告 工作总结 个人总结 述职报告 实习报告 单位总结 演讲稿2017年一级计算机信息技术及应用考试试题级答案一、基础知识题(共45分&#xff0c;每题1…