【Gin】HTTP 請求調試器

文章目錄

    • 項目概述
    • 代碼功能詳解
      • 1. 導入必要的包
      • 2. 主函數和路由設置
      • 3. 請求信息捕獲
      • 4. 請求參數和頭信息
      • 5. 請求體處理
        • 5.1 JSON 數據處理
        • 5.2 表單數據處理
        • 5.3 Multipart 表單數據處理
        • 5.4 其他類型數據處理
      • 6. 構造響應對象
      • 7. 返回 JSON 響應
    • 功能特點
    • 使用場景
    • 完整代碼

項目概述

這個 Gin HTTP 請求調試器是一個功能完整的工具,用于測試和調試前端接口調用。它能夠捕獲并記錄所有請求信息,并以清晰的結構化方式展示這些信息。這個工具特別適合 API 開發、Webhook 調試、第三方服務集成驗證等場景。

代碼功能詳解

1. 導入必要的包

import ("encoding/json""fmt""io""net/http""strings""time""github.com/gin-gonic/gin"
)
  • encoding/json: 用于 JSON 數據的編碼和解碼
  • fmt: 用于格式化輸入輸出
  • io: 提供基本的 I/O 操作
  • net/http: 提供 HTTP 相關功能
  • strings: 提供字符串操作函數
  • time: 提供時間相關功能
  • github.com/gin-gonic/gin: Gin Web 框架,用于構建 HTTP 服務器

2. 主函數和路由設置

func main() {r := gin.Default()r.Any("/*path", func(c *gin.Context) {// 請求處理邏輯})// 啟動服務fmt.Println("HTTP Request Debugger is running on http://localhost:8080")r.Run(":8080")
}
  • gin.Default(): 創建一個默認的 Gin 路由器
  • r.Any("/*path", ...): 定義一個通用的路由處理器,可以處理所有 HTTP 方法
  • r.Run(":8080"): 啟動 HTTP 服務器,監聽 8080 端口

3. 請求信息捕獲

// 獲取請求基本信息
url := c.Request.URL.String()
method := c.Request.Method
protocol := c.Request.Proto
host := c.Request.Host
path := c.Param("path")
clientIP := c.ClientIP()
timestamp := time.Now().Format("2006-01-02 15:04:05.000")
requestID := fmt.Sprintf("%d", time.Now().UnixNano())
  • url: 完整的請求 URL
  • method: HTTP 方法(GET, POST, PUT, DELETE 等)
  • protocol: HTTP 協議版本(如 HTTP/1.1)
  • host: 請求的主機名
  • path: 請求路徑
  • clientIP: 客戶端的 IP 地址
  • timestamp: 請求時間戳,精確到毫秒
  • requestID: 唯一的請求 ID,基于時間戳生成

4. 請求參數和頭信息

// 獲取請求參數
params := c.Request.URL.Query()
// 獲取請求頭
headers := make(map[string]string)
for k, v := range c.Request.Header {headers[k] = strings.Join(v, ", ")
}
  • params: 獲取 URL 查詢參數
  • headers: 獲取所有請求頭信息,并轉換為字符串形式的鍵值對

5. 請求體處理

// 處理不同類型的請求體
contentType := c.Request.Header.Get("Content-Type")
var data interface{}
var rawBody []byte
  • contentType: 獲取請求體的內容類型
  • data: 用于存儲解析后的請求數據
  • rawBody: 用于存儲原始請求體
5.1 JSON 數據處理
if strings.Contains(contentType, "application/json") {// 處理JSON數據bodyBytes, err := io.ReadAll(c.Request.Body)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": "cannot read body"})return}rawBody = bodyBytesvar jsonData map[string]interface{}if err := json.Unmarshal(bodyBytes, &jsonData); err == nil 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88176.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88176.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

物聯網(IoT)領域的協議

物聯網(IoT)領域的通信協議種類繁多,不同協議適用于不同的應用場景(如低功耗設備、工業自動化、家庭智能設備等)。以下是主要物聯網協議的分類及詳細解釋:一、物聯網協議分類物聯網協議通常分為兩大類&…

專題一_雙指針_四數之和

一:題目解析 題目鏈接:18. 四數之和 - 力扣(LeetCode) 注:本題是在上題的基礎上講解的:專題一_雙指針_三數之和-CSDN博客 解析:和三數之區別在于找四元組和為targe的數字 而不是0 二&#xff1a…

Spring Boot多數據源配置詳解

Spring Boot多數據源配置詳解 在實際企業開發中,隨著業務復雜度提升,單一數據源已無法滿足所有場景需求。比如:讀寫分離、分庫分表、數據遷移、微服務整合等,這時就需要用到多數據源配置。本文將從原理、配置、常見問題和最佳實踐…

項目進度嚴重依賴關鍵人,如何分散風險

項目進度嚴重依賴關鍵人的風險,可以通過建立知識共享機制、強化團隊協作模式、實施交叉培訓和培養后備人才、優化流程標準化等措施有效分散。其中,實施交叉培訓和培養后備人才尤為重要,通過培養多個成員具備相似的關鍵技能,能夠迅…

【RK3568+PG2L50H開發板實驗例程】FPGA部分 | 以太網傳輸實驗例程

本原創文章由深圳市小眼睛科技有限公司創作,版權歸本公司所有,如需轉載,需授權并注明出處(www.meyesemi.com)1.實驗簡介實驗目的:完成 DDR3 的讀寫測試。實驗環境:Window11 PDS2022.2-SP6.4芯片型號&#x…

《每日AI-人工智能-編程日報》--2025年7月9日

介紹:AI 方面1. Manus 通用智能體初成型,開啟 AIAgent 新時代?中泰證券發布研報稱,首款通用型 AI 智能體 Manus 已問世,能夠將復雜任務拆解為可執行的步驟鏈,并在虛擬環境中靈活調用工具,標志著 AI 從 “Reasoner” 走…

MyBatis之數據操作增刪改查基礎全解

目錄 1. ?MyBatis添加數據 1.1. 持久層接口添加方法 1.2. 映射文件添加標簽 1.3. 編寫測試方法 2. ??MyBatis修改數據 2.1. 代碼的優化 2.2. 持久層接口添加方法 2.3. 映射文件添加標簽 2.4. 編寫測試方法 3. 🗑?MyBatis刪除數據與根據Id查詢 3.1. 刪…

kbmMemTable Pro 7.82 Delphi 11 源代碼

kbmMemTable Pro 7.82 Delphi 11 源代碼KbmMemTable 是一個用于在 Win 32/64、Mac OS、Android 和 iOS 32/64 應用程序中存儲臨時數據的組件,這些應用程序可以使用 RAD Studio、Delphi、C Builder 或 FPC 等編程語言創建,同時您還可以高速訪問存儲在數據…

LeetCode Hot 100 除自身以外數組的乘積

給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。請 不要使用除法,且在 O(n) 時間復雜度內…

VC Code--常用的配置

原文網址:VC Code--常用的配置-CSDN博客 簡介 本文介紹VC Cod常用的配置。 1.字體大小 整體字體大小 左下角齒輪> Settings> Windows> Window: Zoom Level> 改為:2 編輯器字體大小(如果調整了整體字體大小,此處…

大模型驅動的智能體:從GPT-4到o1的能力躍升

大模型驅動的智能體:從GPT-4到o1的能力躍升 🌟 嗨,我是IRpickstars! 🌌 總有一行代碼,能點亮萬千星辰。 🔍 在技術的宇宙中,我愿做永不停歇的探索者。 ? 用代碼丈量世界&#xf…

200nl2sql

‘train_runtime’: 1375.1089, ‘train_samples_per_second’: 0.025, ‘train_steps_per_second’: 0.007, ‘train_loss’: 0.0, ‘num_tokens’: 115914.0, ‘completions/mean_length’: 76.4125, ‘completions/min_length’: 27.8, ‘completions/max_length’: 151.2, …

Transformer、BERT、GPT以及Embedding之間的關系

1. Transformer架構的兩大方向 Transformer分為兩大類應用,但劃分標準不是"分類vs生成",而是編碼方式: Encoder架構(代表:BERT): 使用Transformer的??編碼器??(Encode…

ARM匯編編程(AArch64架構)課程 - 第7章:SIMD與浮點運算

目錄1. NEON寄存器關鍵特性數據排列示例2. 浮點指令2.1 FMUL指令2.2 FADD指令2.3 FCMP指令1. NEON寄存器 AArch64架構提供32個128位NEON向量寄存器(V0-V31),支持SIMD并行計算 關鍵特性 寄存器類型數量位寬數據視圖Q寄存器32128bQ0-Q31D寄存…

Word2Vec模型詳解:CBOW與Skip-gram

Word2Vec模型詳解:CBOW與Skip-gram 目錄 模型概述理論基礎CBOW模型詳解Skip-gram模型詳解模型對比代碼實現詳解訓練過程分析應用場景實驗結果總結 模型概述 Word2Vec是一種用于生成詞向量的神經網絡模型,由Google在2013年提出。它包含兩種主要架構&am…

跨服務sqlplus連接oracle數據庫

背景:ogg程序同步數據。 目標庫:客戶oracle數據庫11.0.2.4.0,也就是11g的數據庫。源庫:業務組搭建的19c數據庫,剛安裝的oracle數據庫。ogg在源庫和目標庫系統都部署好了并且也可以通信。在目標庫系統使用sqlplus測試連…

虛擬機安裝與使用vim編輯器簡單使用

文章目錄1.VMware17許可證2.ubuntu虛擬機的顯示屏幕太小3.vmware 17 無法安裝 vmware tools4.buntu常用快捷鍵與命令5.vim文本編輯器參考資料:1.VMware17許可證 JU090-6039P-08409-8J0QH-2YR7F(親測2025/7/8有效) 2.ubuntu虛擬機的顯示屏幕…

Tomcat:啟用https(Windows)

1、在D盤cmd,使用keytool生成簽名(365天)(密碼111111): keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 2、在conf/server.xml中添加如下配置&#xff0…

A模塊 系統與網絡安全 第四門課 彈性交換網絡-2

今日目標 STP協議概述STP工作原理選舉根端口和指定端口BPDUMSTP工作原理及配置MSTP負載均衡1 STP協議概述 1.1 環路的危害 單點故障 PC之間的互通鏈路僅僅存在1個 任何一條鏈路出現問題,PC之間都會無法通信解決方案 提高網絡可靠性 增加冗余/備份鏈路產生新的問題 增…

人工智能-基礎篇-20-如何搭建一個人工智能知識庫?

1、前期準備階段 1、明確目標與范圍 目標:確定知識庫的核心用途(如內部文檔共享、客戶服務支持、培訓材料存儲等)。明確預期用戶群體及其需求。范圍:明確覆蓋部門(如技術部、銷售部)、知識類型(…