web后端-java-httpClient

简介: web后端-java-httpClient

N.1 介绍

1)相关网站介

(1)在线的jison格式验证 JSON在线校验格式化工具(Be JSON)

(2)kettle和NoSQLBooster for MongoDB 可以用的上。

(3)mysql也有json提取函数 select JSON_EXTRACT('{"id":"124515"}', '$.id') 提取json的value ,但要注意 必修是 mysql5.7版本以上 ,不然会报错FUNCTION JSON_EXTRACT does not exist

2)get和post请求

但没有说固定使用哪一种 ,根据接口文档定义的

(1)带参数的GET请求的方式

方式一:直接将参数拼接到url后面 如:www.baidu.xxx.com?name=java&sex=man

方式二:使用URI的方法设置参数 setParameter("key", "value")

(2)带参数的post请求的方式

方式一:使用URI的方法设置参数 setParameter("key", "value"),

但post里的Content-type请求有4中写法,即4种参数设置写法,但本质都是代码里面设置参数,算一种方式的一种。而get里的Content-type设置是没有影响效果的。

3)post请求的4种类型格式

参考链接 https://www.cnblogs.com/yrxns/p/11051685.html

(1)Header("Content-type", "application/json") //市场用的比较多的一种,这里介绍这种。

如书写格式:{"input1":"xxx","input2":"ooo","remember":false}

(2)Header("Content-type", " multipart/form-data") // 默认的

如书写格式:input1=xxx&input2=ooo&remember=false

(3)Header("Content-type", "boundary= application/x-www-form-urlencoded")

(4)Header("Content-type", "text/xml")

4)拓展:在postman里面row格式包括:text、json、xml、html

N.2 Post请求(Json传参或不传参)

(1)还要注意,市场目前很多请求返回的数据条数是有限制的,有的是公司是get和post每次请求返回的数据最大就1mb以下。有的公司是每次请求“每页最多可以取出100条”数据,然后遍历每一页,直到把数据给取完为止。

(2)一般来讲 这两个参数是很常见也是必带的情况: { "current": 1, "pageSize": 100 }

current是当前页号,pageSize表示当前页的数据大小.

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.2.5</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.47</version>

</dependency>

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import org.apache.http.HttpResponse;

import org.apache.http.ParseException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.util.EntityUtils;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Collection;

import java.util.Set;

public class javaHttp {

public static void main(String[] args) throws IOException {

// 调用API读取json数据

JSONObject data = javaHttp.deviceRequest("http://hn216.api.yesapi.cn/?&s=App.Common_University.Search&return_data=0&top_num=10&school_name=师范&app_key=AD7A0B7A69D53F9E35EAB48A6D4E7CAD");

// System.out.println(jsonFormatPrint.responseFormat(data2.toString())); // 注意 idea在打印的时候 会用内容限制 有些内容不会显示

// System.out.println(data1); // 显示结果 {"msg":"成功","code":200,"data":{"history":[{"close_volta ....

// 读取json数据,或可以是本地文件

JSONObject dataB = JSON.parseObject(

"{\n" +

"\"ret\":200,\"data\":{\"err_code\":0,\"err_msg\":\"\",\"schools\":[\n" +

"{\"school_name\":\"北京师范大学\",\"school_province\":\"北京\",\"school_level\":\"本科\",\"school_website\":\"http:\\/\\/www.bnu.edu.cn\\/\",\"school_city\":\"北京市\"},\n" +

"{\"school_name\":\"首都师范大学\",\"school_province\":\"北京\",\"school_level\":\"本科\",\"school_website\":\"http:\\/\\/www.cnu.edu.cn\\/\",\"school_city\":\"北京市\"}]\n" +

"}\n" +

"}\n" +

"");

/**

*json的基本判断

*/

System.out.println(data.size()); // 第一层的key有几个。内嵌的层不计数

System.out.println(data.isEmpty()); // 是否为空

System.out.println(data.containsKey("data")); // 第一层的key是否有data

System.out.println(data.containsValue(200)); // 第一层的value是否有200

/**

*json的集合获取

*/

// 获取第一层的key集合

Set<String> data1 = data.keySet();

for (String str : data1) {

System.out.print(str + ","); // ret,msg,data,_t,_auth

}

// 获取第一层的value集合

Collection<Object> data2 = data.values();

for (Object str : data2) {

System.out.println(str);

}

/**

* 获取某个key位置的值

*/

//获取第一层结果要求返回JSONObject。这样就方便继续获取第二层的数据

Object a = data.getJSONObject("data").get("schools");

//获取第一层结果要求返回JSONObject。且获取第二层的数据要求返回JSONArray。这样就方便取出第三层索引2的数据

Object b = data.getJSONObject("data").getJSONArray("schools").get(2);

//获取第一层结果要求返回JSONObject。且获取第二层的数据要求返回JSONArray。且获取第三层的索引2数据要求返回数组对象。这样就可以获取school_name的数据

Object c = data.getJSONObject("data").getJSONArray("schools").getJSONObject(2).get("school_name");

System.out.println(a);// [ { xxx},{xxx} ,{xxx} ]

System.out.println(b); // {"school_website":"http://www.kdcnu.com/","school_level":"本科","school_name":"首都师范大学科德学院","school_city":"北京市","school_province":"北京"}

System.out.println(c); // 首都师范大学科德学院

/**

* 构造自己需要的数据

*/

// 提取 (err_code, err_msg, school_name, school_city) 信息

String err_code = data.getJSONObject("data").get("err_code").toString(); //获取JSON数组集合

String err_msg = data.getJSONObject("data").get("err_msg").toString(); //获取JSON数组集合

JSONArray dataArr = data.getJSONObject("data").getJSONArray("schools"); //获取JSON数组集合

for (Object x : dataArr) {

JSONObject jsonData = (JSONObject) JSONObject.toJSON(x); // 这里的话 不能直接变成JSONObject,所以要转换一下

System.out.println(err_code + "," + err_msg + "," + jsonData.get("school_name") + "," + jsonData.get("school_city")); //显示结果 = 0,,北京师范大学,北京市

}

}

/**

* 主要使用于带了json参数(不带也行)的get或post请求

*/

public static JSONObject deviceRequest(String url) {

JSONObject result = null;

try {

JSONObject json = new JSONObject();

// 3个参数,有参数要求自己可以加,没有参数要求 可以不加

// json.put("macid", "038580248574");

// json.put("from", 1625068801); // 2021-07-01 00:00:01

// json.put("to", 1627660799); // 2021-07-30 23:59:59

// 创建httpclient

@SuppressWarnings({"resource"})

HttpClient httpClient = new DefaultHttpClient();

// 创建post 配置post请求参数

HttpPost post = new HttpPost(url); // 如果要用get 这里就创建httpGet() 对象即可

post.setEntity(new StringEntity(json.toJSONString()));

post.setHeader("Content-type", "application/json"); //如果你请求的是json这里就设置json 不对应的话 会报错

// 有的业务 token不是放在URL里面的,是放在请求头里面的,配置如下

// post.addHeader("token","eyJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE2NTk2MDIyODMsImNlciI6IntcImFiYW5kb25");

// post.setHeader("token", "eyJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE2NTk2MDIyODMsImNlciI6IntcImFiYW5kb25"); //set其实不用写也可以

// 执行请求

HttpResponse response = httpClient.execute(post);

// 获取请求结果

String data = EntityUtils.toString(response.getEntity());

result = (JSONObject) JSONObject.parse(data);

} catch (ParseException | IOException e) {

e.printStackTrace();

}

return result;

}

/**

* 将json数据写出

*/

public static void fileWriter(Object data,String path) throws IOException {

FileWriter fileWriter = new FileWriter(path); // 写出文件的时候 要注意记得 flush和close 否则数据会丢失部分

BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

bufferedWriter.write(jsonFormatPrint.formatOut(data.toString()));

bufferedWriter.flush();

bufferedWriter.close();

}

}

N.3 结果

相关文章
|
6天前
|
SQL 监控 安全
Java Web应用的安全防护与攻防策略
Java Web应用的安全防护与攻防策略
|
2天前
|
XML 前端开发 API
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
【7月更文挑战第13天】构建现代Web应用的关键在于提供无缝用户体验,这涉及AJAX和Fetch API的异步数据交换以及Python(如Flask)的后端支持。Fetch API以其基于Promise的简洁接口,改进了AJAX的复杂性。例如,一个Flask应用可提供用户数据,前端利用Fetch API在不刷新页面的情况下显示信息。这种结合提升了效率,减少了服务器负载,是现代Web开发的趋势。随着技术发展,预期将有更多工具优化这一过程。
10 3
|
7天前
|
消息中间件 Java 微服务
构建可扩展的Java Web应用架构
构建可扩展的Java Web应用架构
|
13天前
|
监控 负载均衡 Java
如何设计高可用性的Java Web应用程序
如何设计高可用性的Java Web应用程序
|
15天前
|
存储 缓存 负载均衡
使用Java构建可扩展的Web应用
使用Java构建可扩展的Web应用
|
14天前
|
SQL 安全 Java
Java Web应用的安全防护与攻防深度剖析
Java Web应用的安全防护与攻防深度剖析
|
15天前
|
Java API 数据库
Java后端架构设计:从单体到微服务的演进
Java后端架构设计:从单体到微服务的演进
|
1天前
|
XML 前端开发 API
颠覆传统!AJAX、Fetch API与Python后端,开启Web开发新篇章!
【7月更文挑战第14天】Web开发中,AJAX作为异步通信先驱,与新兴的Fetch API一起革新交互体验。Fetch基于Promise,简化了请求处理。Python后端,如Flask,提供稳定支撑。这三者的融合,推动Web应用达到新高度,实现高效、实时交互。通过示例展示,我们看到从发送请求到更新UI的流畅过程,以及Python如何轻松返回JSON数据。这种组合揭示了现代Web开发的潜力和魅力。
8 0
|
14天前
|
SQL 监控 安全
Java Web应用的安全防护与攻防策略
Java Web应用的安全防护与攻防策略
|
14天前
|
缓存 监控 算法
构建高性能Java Web应用的技术策略
构建高性能Java Web应用的技术策略