go 自定义http.Client – 动态修改请求Body

在对接Alexa Smart Home时,有的请求Payload中需要传入Access Token,但是这个Token是由OAuth2 Client管理的,封装Payload时并不知道Access Token。

所以使用自定义RoundTripper,在请求前取出Header里的token,修改body,实现动态修改payload。

go中可以使用http.DefaultClient进行http请求,也可以自己创建http.Client,传入自定义Transport可以实现对request的处理。

http.Client

http.RoundTripper

我们先写一个server,打印出访问的payload信息。

如果使用默认的DefaultClient,只会打印出我们传入的payload。

结果:

使用自定义Transport

使用自定义Client

最终结果:

我们可以使用http.DefaultClient完成大部分http请求,但是如果我们需要实现一些自定义逻辑时,可以传入http.Client中对应自定义的部分,实现自定义逻辑。

本文中通过修改Transport,读取请求Header,并修改请求Body,动态修改请求Payload。

Original: https://www.cnblogs.com/xpunch/p/15615198.html
Author: xpunch
Title: go 自定义http.Client – 动态修改请求Body

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/516508/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Go语言中单个字符char rune

    Go 语言的字符使用UTF-8 编码 *英文字母 1个 字节, 汉子 3个 字节 golang的字符称为rune,等价于C中的char,…

    Go语言 2023年5月29日
    054
  • Go语言之高级篇Beego框架之爬虫项目实战

    一、爬虫项目 1、爬虫基础 a、网页上面会有相同的数据 b、去重处理 布隆过滤器哈希存储 c、标签匹配: 正则表达式beautiful soup或lxml这种标签提取库 d、动态内…

    Go语言 2023年5月29日
    061
  • Golang Zap日志

    Zap日志解析 Config.yaml zap: level: ‘info’ #日志级别 format: ‘console’ #输出的级别,有console和json prefix…

    Go语言 2023年5月25日
    073
  • 在浏览器上开发GO和Vue!(基于code-server)

    在浏览器上开发GO和Vue!(基于code-server) 曾几何时,开发者们都被安装编程环境苦恼,尽管现在很多语言的开发环境已经不难装了,但是如果我们能有一个运行在云端的编译器,…

    Go语言 2023年5月25日
    074
  • GO语言程序查询数据库字段为空遇到的几个问题总结

    如果字段值可能为空,那么从表里面读取数据的时候程序使用的变量类型应该使用 sql.NullXXX 类型,比如下面的日期类型: 开始的时候,deleteAt 使用的也是 time.T…

    Go语言 2023年5月25日
    080
  • Go语言 异常panic和恢复recover用法

    背景:Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会…

    Go语言 2023年5月29日
    056
  • 使用go语言遇到的一些问题记录

    一、参数校验问题 使用go做web服务时,经常需要对请求参数进行校验,有些必填参数需要校验是否为空。 经常会遇到参数a为int类型,但是其值取值范围为0-xxx。0也是有意义的。 …

    Go语言 2023年5月29日
    065
  • Go 简单入门

    GO的环境配置? GOPATH GOROOT 都是干嘛用的? 配置环境跟java对比有点奇怪 https://blog.csdn.net/weixin_40563757/artic…

    Go语言 2023年5月25日
    078
  • 【golang详解】go语言GMP(GPM)原理和调度

    Goroutine调度是一个很复杂的机制,下面尝试用简单的语言描述一下Goroutine调度机制,想要对其有更深入的了解可以去研读一下源码。 首先介绍一下GMP什么意思: G &#…

    Go语言 2023年5月25日
    064
  • 解决go-micro与其它gRPC框架之间的通信问题

    在之前的文章中分别介绍了使用gRPC官方插件和go-micro插件开发gRPC应用程序的方式,都能正常走通。不过当两者混合使用的时候,互相访问就成了问题。比如使用go-micro插…

    Go语言 2023年5月25日
    081
  • go-micro开发RPC服务的方法及其运行原理

    go-micro是一个知名的golang微服务框架,最新版本是v4,这篇文章将介绍go-micro v4开发RPC服务的方法及其运作原理。 基本概念 go-micro有几个重要的概…

    Go语言 2023年5月25日
    062
  • 从零开始搭建GoLang语言开发环境

    更多干货文章,更多最新文章,欢迎到作者主博客 菜鸟厚非 一、安装 GoLang 1.1 下载 首先访问 https://go.dev/dl/ 下载 GoLang,下载完成后双击安装…

    Go语言 2023年5月25日
    071
  • Go语言之反射

    一、反射的基本概念 (一)什么是反射 反射可以再运行时动态获取变量的各种信息,比如变量的类型、值等 如果时结构体变量,还可以获取到结构体本身的各种信息,比如结构体的字段、方法 通过…

    Go语言 2023年5月29日
    079
  • Go 语言快速开发入门

    需求 开发的步骤 linux下如何开发Go程序 MAC下如何开发Go程序 Golang执行流程分析 编译和运行说明 Go程序开发的注意事项 Go语言的转义字符(escapechar…

    Go语言 2023年5月25日
    082
  • Golang通脉之指针

    指针的概念 指针是存储另一个变量的内存地址的变量。 变量是一种使用方便的占位符,用于引用计算机内存地址。 一个指针变量可以指向任何一个值的内存地址。 在上面的图中,变量b的值为15…

    Go语言 2023年5月25日
    075
  • 基于LSM的Key-Value数据库实现初篇

    前篇文章对LSM的基本原理,算法流程做了简单的介绍,这篇文章将实现一个简单的 基于LSM算法的 迷你Key-Value数据库,结合上篇文章的理论与本篇文章的实践使之对LSM算法有更…

    Go语言 2023年5月25日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球