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,一经查实,立即删除!

相关文章

昇思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; 了…

什么是自然语言处理(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;且随着人…

WSL2安装ContOS7并更新gcc

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

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

随着现代生活节奏的加快&#xff0c;人们越来越注重生活品质与便利性。在这样的背景下&#xff0c;家政服务市场迅速崛起&#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…

独立站新风口:TikTok达人带货背后的双赢合作之道

TikTok以其庞大的用户基础、高度互动性和创新的内容形式&#xff0c;为独立站带来了前所未有的发展机遇。独立站与TikTok达人的合作&#xff0c;不仅能够帮助独立站快速提升品牌知名度和销售额&#xff0c;还能为TikTok达人带来更多商业机会和影响力。本文Nox聚星将和大家探讨独…

Android sdk 安装已经环境配置

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Android ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 一、下载 二、安装 三、环境配置 我的其他博客 正文 一、下载 1、大家可去官网下载 因为需要魔法 所以就不展示了 2、去下面这…

【JS】纯web端使用ffmpeg实现的视频编辑器-视频合并

纯前端实现的视频合并 接上篇ffmpeg文章 【JS】纯web端使用ffmpeg实现的视频编辑器 这次主要添加了一个函数&#xff0c;实现了视频合并的操作。 static mergeArgs(timelineList) {const cmd []console.log(时间轴数据,timelineList)console.log("文件1",this.readD…

Vue+ElementUi实现录音播放上传及处理getUserMedia报错问题

1.Vue安装插件 npm install --registryhttps://registry.npmmirror.com 2.Vue页面使用 <template><div class"app-container"><!-- header --><el-header class"procedureHeader" style"height: 20px;"><el-divid…

vue2 接口文档

const assetmanagementIndex (params) > getAction("/asset/assetmanagementsystem/page", params); //资产管理制度表分页列表 const assetmanagementPost (params) > postAction("/asset/assetmanagementsystem", params); //资产管理制度表新增…

维护Nginx千字经验总结

Hello , 我是恒 。 维护putty和nginx两个项目好久了&#xff0c;用面向底层的思路去接触 在nginx社区的收获不少&#xff0c;在这里谈谈我的感悟 Nginx的夺冠不是偶然 高速:一方面&#xff0c;在正常情况下&#xff0c;单次请求会得到更快的响应&#xff1b;另一方面&#xff0…

从零开始学量化~Ptrade使用教程——安装与登录

PTrade交易系统是一款高净值和机构投资者专业投资软件&#xff0c;为用户提供普通交易、篮子交易、日内回转交易、算法交易、量化投研/回测/实盘等各种交易工具&#xff0c;满足用户的各种交易需求和交易场景&#xff0c;帮助用户提高交易效率。 运行环境及安装 操作系统&…

昇思25天学习打卡营第3天 | 数据集 Dataset

数据是深度学习的基础&#xff0c;高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎&#xff0c;通过数据集&#xff08;Dataset&#xff09;和数据变换&#xff08;Transforms&#xff09;实现高效的数据预处理。其中Dataset是Pipel…

将数据切分成N份,采用NCCL异步通信,让all_gather+matmul尽量Overlap

将数据切分成N份,采用NCCL异步通信,让all_gathermatmul尽量Overlap 一.测试数据二.测试环境三.普通实现四.分块实现 本文演示了如何将数据切分成N份,采用NCCL异步通信,让all_gathermatmul尽量Overlap 一.测试数据 1.测试规模:8192*8192 world_size22.单算子:all_gather:0.035…