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 结果

相关文章
|
1月前
|
存储 安全 关系型数据库
后端技术:构建高效稳定的现代Web应用
【10月更文挑战第5天】后端技术:构建高效稳定的现代Web应用
52 1
|
2月前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
53 1
|
27天前
|
存储 安全 数据库
后端技术在现代Web开发中的实践与创新
【10月更文挑战第13天】 本文将深入探讨后端技术在现代Web开发中的重要性,通过实际案例分析展示如何利用先进的后端技术提升用户体验和系统性能。我们将从基础架构设计、数据库优化、安全性保障等方面展开讨论,为读者提供清晰的指导和实用的技巧。无论是新手开发者还是经验丰富的技术人员,都能从中获得启发和帮助。
33 2
|
30天前
|
自然语言处理 Cloud Native 数据安全/隐私保护
后端技术在现代Web开发中的实践与创新
本文探讨了后端技术在现代Web开发中的重要性及其应用。通过分析当前流行的后端框架和开发模式,揭示了如何利用这些技术来构建高效、可扩展的Web应用程序。同时,文章也讨论了未来后端技术的发展趋势,为开发者提供了一些启示。
|
1月前
|
前端开发 API 数据格式
颠覆传统!AJAX、Fetch API与Python后端,开启Web开发新篇章!
在Web开发领域,技术的快速迭代推动着应用不断进化。传统前后端交互方式已无法满足现代Web应用对高效、实时性和用户体验的需求。AJAX作为异步通信的先驱,使页面无需刷新即可更新部分内容,显著提升用户体验;尽管XML曾是其主要数据格式,但如今JSON已成为主流。Fetch API则以其简洁、灵活的特点成为AJAX的现代替代品,基于Promises的异步请求让开发更加高效。与此同时,Python后端凭借高效稳定和丰富的库支持,成为众多开发者的首选,无论是轻量级的Flask还是全功能的Django,都能为Web应用提供强大的支撑。
36 0
|
2月前
|
安全 JavaScript Java
后端技术在现代Web开发中的实践与挑战
本文旨在探讨后端技术在现代Web开发中的关键作用,分析其在数据处理、业务逻辑实现和系统安全等方面的重要性。通过阐述常见的后端技术和框架,如Node.js、Django和Spring Boot,展示它们在实际项目中的应用。同时,文章将讨论后端开发所面临的主要挑战,包括性能优化、扩展性和维护性问题,以及如何应对这些挑战。最终,通过对实际案例的分析,总结出一套行之有效的后端开发最佳实践,为开发者提供参考。
70 5
|
1月前
|
XML 前端开发 API
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
惊艳全场的秘诀!AJAX、Fetch API与Python后端,打造令人惊叹的Web应用!
26 0
|
2月前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
|
3月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
39 0
|
3月前
|
Java Maven Android开发
解锁Web开发新技能:从零开始的Struts 2之旅——让你的Java编程之路更加宽广,首个应用实例带你飞!
【8月更文挑战第31天】对于初学者,掌握 Struts 2 框架不仅能提升 Web 开发能力,还能深入了解 MVC 架构。Struts 2 是一个基于 Servlet 的 Java 框架,提供表单验证、文件上传、国际化等功能,便于快速构建易维护的 Web 应用。本文通过示例演示如何从零开始搭建环境并创建一个简单的 Struts 2 项目,包括配置 `struts.xml`、编写 Action 类及视图文件,并配置 web.xml。通过这些步骤,你将学会基本的开发流程,为进一步学习高级功能打下基础。
48 0