Java 实现application/x-www-form-urlencoded编码格式的POST请求

一、实现方式

在Java中,实现application/x-www-form-urlencoded内容类型通常涉及到发送HTTP POST请求。你可以使用java.net.HttpURLConnection或者第三方库如Apache HttpClient来实现。

以下是使用HttpURLConnection发送application/x-www-form-urlencoded数据的代码示例

二、解析效果

在这里插入图片描述

三、代码实现

1、引入pom.xml依赖

<dependencies><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId><version>2.14.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.6</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version><scope>provided</scope></dependency>
</dependencies>

2、PostReturnDto.java一个返回类

可以根据具体的项目场景匹配成自己写的类

package com.test.util;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Map;@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class PostReturnDto implements Serializable {private static final long serialVersionUID = 1L;private String sendData;private JSONObject resJson;private JsonNode jsonNode;private Map<String,String> resHeader;private int code;}

3、核心工具类

package com.test.util;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.test.util.PostReturnDto;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;/*** 远程数据交互工具*/
@Slf4j
public class RemoteDataMsg {public static PostReturnDto accessSendToMsg(String url,String cookie, String info){PostReturnDto postReturnDto = new PostReturnDto();log.info("访问地址:{} ,获取Cookie:{}",url,cookie);try {URL newurl = new URL(url);HttpURLConnection connection = (HttpURLConnection)newurl.openConnection();// 设置请求方法和头部信息connection.setRequestMethod("POST");connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");connection.setRequestProperty("Cookie",cookie);connection.setUseCaches(false);connection.setDoInput(true);connection.setDoOutput(true);// 发送请求体if(!StringUtils.isEmpty(info)){try(OutputStream os = connection.getOutputStream()){os.write(info.getBytes(StandardCharsets.UTF_8));}}// 获取响应码和处理响应int code = connection.getResponseCode();log.info("返回响应码:{}",code);// 获取返回响应流,并将流转换为UTF-8BufferedReader in =  new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));// 将获取到的流存入到StringBuilder中String inputLine;StringBuilder response = new StringBuilder();while ((inputLine = in.readLine())!= null){response.append(inputLine);}// 转换为JSON输出JSONObject resJson;try{resJson = JSONObject.parseObject(response.toString());log.info("转换后的JSON报文数据:{}",resJson);postReturnDto.setResJson(resJson);}catch (Exception e){log.error("post访问数据不是json格式 \n"+response.toString());e.printStackTrace();return postReturnDto;}in.close();// 关闭连接connection.disconnect();}catch (Exception e){e.printStackTrace();log.info("访问异常");}return postReturnDto;}
}

4、测试主类

package com.test.util;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.test.PostReturnDto;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class RemoteMainTest {public static void main(String[] args) {// 自己的URL地址String url = "http://20.xxx.xx.xx:7003/acs/acs-dim/inDebtContract.ctrl?method=inDebtContractQurey";// Cookie信息String cookie = "locale=zh_CN; sysDefaultDate=2024-05-31; themeKey=default; use.new.theme=false; JSESSIONID=032077E515BB0977D72D2B3046442758; Authorization=eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiIyMTA2MDcxNDIyMTk2NjUyMjUxMyIsImV4cGlyZSI6MTcxOTg5MDEzMjczNywiZXhwIjoxNzUxNDI2MTMyfQ.mXdaznwZn4E_FPjAVHlbPIdsqYnZ6OjK7pvHqP2oGmw";// 参数信息,拼接的String info = "_startRow=0&_rowCount=30&productId=10000000000002422541";// 开始调用PostReturnDto res = RemoteDataMsg.accessSendToMsg(url,cookie,info);// 返回值做下简单判断if(res.getCode()==0 && res.getResJson() != null){// 解析JSONArray dataList = res.getResJson().getJSONArray("data");if(dataList.size()>0){for (int i=0;i<dataList.size();i++) {JSONObject data = dataList.getJSONObject(i);String checkerId = data.getString("checkerId"); //String instrId = data.getString("instrId"); //String txId = data.getString("txId"); //// 循环打印上面解析出的3个字段,具体解析按自己的项目场景,这只是简单的业务案例log.info("checkerId={},instrId={},txId={}",checkerId,instrId,txId);}}}}
}

四、知识拓展

  • application/x-www-form-urlencoded: 窗体数据被编码为名称/值对,这是标准的编码格式。
  • multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
  • text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。

form的enctype属性为编码方式,常用有两种:

  1. application/x-www-form-urlencoded
  2. multipart/form-data,默认为application/x-www-form-urlencoded。

1、当action为get时,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后 把这个字串append到url后面,用&分割,加载这个新的url。

2、当action为post时,浏览器把form数据封装到http body中,然后发送到server。

3、如果没有type=file控件,用默认的application/x-www-form-urlencoded就可以了。

4、如果有type=file控件,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content- Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。

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

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

相关文章

linux的shell脚本编程详解

Shell 脚本是一种用于自动化任务的脚本语言&#xff0c;在 Linux 和其他类 Unix 操作系统中非常流行。它通常用于任务自动化、系统管理和批处理。编写 Shell 脚本并使其自动化编译过程&#xff08;例如使用 gcc 编译 C/C 程序&#xff09;是一种常见的任务。 以下是一个详细的…

昇思MindSpore学习笔记3--张量 Tensor

一、张量Tensor概念 矢量、标量和其他张量的计算函数&#xff0c;有内积、外积、线性映射以及笛卡儿积等 张量坐标在 n 维空间内&#xff0c;有 nr 个分量 每个分量都是坐标的函数,变换时每个坐标分量都按规则作线性变换 张量是一种特殊的数据结构&#xff0c;类似于数组和…

利用深度学习模型进行语音障碍自动评估

语音的产生涉及器官的复杂协调&#xff0c;因此&#xff0c;语音包含了有关身体各个方面的信息&#xff0c;从认知状态和心理状态到呼吸条件。近十年来&#xff0c;研究者致力于发现和利用语音生物标志物——即与特定疾病相关的语音特征&#xff0c;用于诊断。随着人工智能&…

js基础学习

1、js概述 js是javascript的简称&#xff0c;作用是实现页面和用户的交互 js由浏览器解析运行&#xff0c;不需要编译 js由es基础语法&#xff0c;bom浏览器相关&#xff0c;dom文档操作相关 三大部分组成 2、html引入js <!DOCTYPE html> <html lang"zh-CN&qu…

Vue项目打包上线

Nginx 是一个高性能的开源HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它在设计上旨在处理高并发的请求&#xff0c;是一个轻量级、高效能的Web服务器和反向代理服务器&#xff0c;广泛用于提供静态资源、负载均衡、反向代理等功能。 1、下载nginx 2、…

k8s学习--k8s群集ELK日志收集部署最详细的过程与应用(收集k8s群集日志)(图形化界面手把手教学)

文章目录 FilebeatFilebeat主要特点Filebeat使用场景 ELK简介Elasticsearch简介Elasticsearch主要特点Elasticsearch使用场景 Logstash简介Logstash主要特点Logstash使用场景 Kibana简介Kibana主要特点Kibana使用场景 简单理解 环境一、ELK集群部署1.软件安装2.软件配置及启动(…

Webpack: Loader开发 (2)

概述 在上一篇文章中&#xff0c;我们已经详细了解了开发 Webpack Loader 需要用到的基本技能&#xff0c;包括&#xff1a;Loader 基本形态、如何构建测试环境、如何使用 Loader Context 接口等。接下来我们继续拓展学习一些 Loader 辅助工具&#xff0c;包括&#xff1a; 了…

telegram支付

今天开始接入telegram支付,参考教程这个是telegram的官方说明,详细介绍了机器人支付API。 文章公开地址 新建机器人 因为支付是一个单独的系统,所以在做支付的时候单独创建了一个bot,没有用之前的bot了,特意这样将其分开。创建bot的方法和之前不变,这里不过多介绍。 获…

Linux文件数据写入

结构体 fd fd也就是文件描述符&#xff0c;用于标识已经打开的文件、管道、socket等。是进程和内核的桥梁&#xff0c;允许进程执行各种文件操作 struct fd {struct file *file;unsigned int flags; };file Linux内核中表示打开文件的结构体&#xff0c;包含了文件操作所需…

什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术

什么是自然语言处理&#xff1f; 自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能的一个重要分支&#xff0c;旨在让计算机理解、解释和生成人类的自然语言。打个比方&#xff0c;你和Siri对话&#xff0c;或使用谷歌翻译翻译一…

2024广州国际米粉产业展览会暨米粉节

2024广州国际米粉产业展览会 时间&#xff1a;2024年11月16-18日 地点&#xff1a;广州中国进出口商品交易会展馆 主办单位&#xff1a;企阳国际会展集团 【展会简介】 米粉作为一种历史悠久&#xff0c;人们日常食用的食物&#xff0c;其市场需求稳定&#xff0c;且随着人…

学习.NET 8 MiniApis入门

介绍篇 什么是MiniApis&#xff1f; MiniApis的特点和优势 MiniApis的应用场景 环境搭建 系统要求 安装MiniApis 配置开发环境 基础概念 MiniApis架构概述 关键术语解释&#xff08;如Endpoint、Handler等&#xff09; MiniApis与其他API框架的对比 第一个MiniApis…

WSL2安装ContOS7并更新gcc

目录 WSL2安装CentOS7下载安装包安装启动CentOS7 CentOS7更换国内源gcc从源码安装gcc卸载gcc CMake中使用gcc关于linux配置文件参考 WSL2安装CentOS7 Windows11官方WSL2已经支持Ubuntu、Open SUSE、Debian。但是没有centos&#xff0c;所以centos的安装方式略有不同。 下载安…

【面试题】网络IP协议(第六篇)

1.简述IP协议的作用。 IP协议&#xff08;Internet Protocol&#xff09;是TCP/IP协议族中的核心协议之一&#xff0c;主要用于在互联网上进行数据传输。它的主要作用包括&#xff1a; 寻址&#xff1a;IP协议通过IP地址来唯一标识网络中的每一台设备&#xff0c;确保数据包能…

家政小程序的开发:打造现代式便捷家庭服务

随着现代生活节奏的加快&#xff0c;人们越来越注重生活品质与便利性。在这样的背景下&#xff0c;家政服务市场迅速崛起&#xff0c;成为许多家庭日常生活中不可或缺的一部分。然而&#xff0c;传统的家政服务往往存在信息不对称、服务效率低下等问题。为了解决这些问题&#…

mindspore打卡之量子测量

mindspore打卡之量子测量 我们可以看到&#xff0c;采样1000中&#xff0c;00’出现了503次&#xff0c;11’出现了497次&#xff08;由于测量具有随机性&#xff0c;每次运行结果会略有不同&#xff09;&#xff0c;采样结果符合概率分布&#xff0c;细微的误差是由模拟器噪声…

【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(三)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形 ✔️ 第一部分第二部分【第三部分】✔️ 1.2.3 Canvas 与 WebGL&#xff08;精译中 ⏳&#xff09;1.2.4 C…

gameui C++的代码

gameui C的代码 #include <graphics.h> #include "gameboard.h" const int WIDTH 560; const int HEIGHT 780; const int GRID_SIZE 120; class GameUi { private: public:GameUi(GameBoard& gb) {// 初始化图形窗口initgraph(WIDTH, HEIGHT);// 设置…

小米内推官

小米硬件提前批开始啦&#xff01;&#xff01;&#xff01;&#xff01; 请使用小米公司内推码: Q9BN21S 招聘对象&#xff1a;25届秋招 中国内地:毕业时间2025.01-2025.12 中国港澳台及海外:毕业时间2025.07-2025.12 工作地点&#xff1a;北京、南京、武汉、深圳、上海等…

C++中Ranges库的基本用法,如何简化和增强对集合的操作。

Ranges库的基本用法 什么是Ranges库&#xff1f; C20引入的Ranges库&#xff08;<ranges>&#xff09;是一个强大的工具集&#xff0c;旨在简化和增强对集合&#xff08;如数组、向量等序列容器&#xff09;的操作。它提供了一套用于操作序列的功能性接口&#xff0c;使…