登录
首页 >  Golang >  Go问答

读取Golang中的HTTPS响应getBody

来源:stackoverflow

时间:2024-02-23 12:39:23 116浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《读取Golang中的HTTPS响应getBody》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我正在编写一些中间件,即使目标使用 tls 加密,我也需要能够记录响应正文内容。

我有一个处理程序链,在其中我将响应正文存储在中间缓冲区中,以便我可以多次读取它。这是基于 icza(golang 读取请求正文)提供的优秀示例。

在我的处理程序函数中,我正在这样做......

body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    // Print the response body to stdout
    fmt.Printf("Dest HTTP response body: %s\n", body)

    bRdr := bytes.NewReader(body)
    n, err := io.Copy(w, bRdr) // Copy the entire response body into our outgoing response

我发现,当连接到不使用 tls 的目的地时,我会得到可读的输出,但是当连接到使用 tls 的目的地时,响应正文似乎仍然是加密的,尽管复制到对发起者导致发起者收到有效的响应正文内容。

这是使用加密路径读取响应正文的预期行为吗? 我可以解密这些数据以使其可读吗?我已经阅读了 http、tls 和 crypto 包文档,但没有找到任何线索。


解决方案


我不确定我是否理解这个问题,但这里是我调用 https google 链接并打印输出。

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"

    "golang.org/x/net/http2"
)

func main() {
    client := &http.Client{Transport: transport2()}

    res, err := client.Get("https://www.google.com")
    if err != nil {
        log.Fatal(err)
    }

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Fatal(err)
    }

    res.Body.Close()

    fmt.Printf("Code: %d\n", res.StatusCode)
    fmt.Printf("Body: %s\n", body)
}

func transport2() *http2.Transport {
    return &http2.Transport{
        DisableCompression: true,
        AllowHTTP:          false,
    }
}

以上就是《读取Golang中的HTTPS响应getBody》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>