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.pswp.cn/diannao/39513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39513.shtml
英文地址,請注明出處:http://en.pswp.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;使…