为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中使用示例正文字符串创建 http.Response 实例

在 golang 中使用示例正文字符串创建 http.Response 实例

Go
哈士奇WWW 2021-11-22 20:07:08
我愿意http.Response用一个示例正文字符串在 golang 中创建一个示例实例。问题是,它的 body 属性接受ReadCloser实例。但作为一个虚拟响应实例,我想知道是否有一些技巧可以轻松设置它而无需设置所有流读取/关闭部分。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

正如Not_a_Golfer和JimB所建议的:


io.ReadCloser是一个接口,当 astruct实现Read和Close函数时满足。


幸运的是,有ioutil.NopCloser,它接受 aio.Reader并将其包装在nopCloser结构中,该结构同时实现Read和Close。然而,它的Close功能并没有从名字中暗示出来。


下面是一个例子:


package main


import (

    "bytes"

    "fmt"

    "io/ioutil"

    "net/http"

)


func main() {

    t := http.Response{

        Body: ioutil.NopCloser(bytes.NewBufferString("Hello World")),

    }


    buff := bytes.NewBuffer(nil)

    t.Write(buff)


    fmt.Println(buff)

}


查看完整回答
反对 回复 2021-11-22
?
当年话下

TA贡献1890条经验 获得超9个赞

除了最上面的答案,我发现为了让客户将响应视为真品,它需要更完整地形成。对于正常 (200) 响应,我执行以下操作:


body := "Hello world"

t := &http.Response{

  Status:        "200 OK",

  StatusCode:    200,

  Proto:         "HTTP/1.1",

  ProtoMajor:    1,

  ProtoMinor:    1,

  Body:          ioutil.NopCloser(bytes.NewBufferString(body)),

  ContentLength: int64(len(body)),

  Request:       req,

  Header:        make(http.Header, 0),

}

然后你可以,例如,添加标题(带有 401 状态代码,请求授权,比如说)。req是http.Request您为其生成响应的 。


查看完整回答
反对 回复 2021-11-22
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

这应该工作..


func main(){


    go serveHTTP(*port, *host)


    select {}

}


func serveHTTP(port int, host string) {


    mux := http.NewServeMux()

    mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

        requestHandler(w, r)

    })


    addr := fmt.Sprintf("%v:%d", host, port)

    server := &http.Server {

        Addr:           addr,

        Handler:        mux,

        ReadTimeout:    10 * time.Second,

        WriteTimeout:   10 * time.Second,

        MaxHeaderBytes: 1 << 20,

    }


    err := server.ListenAndServe()

    log.Println(err.Error())

}


func requestHandler(w http.ResponseWriter, r *http.Request){

  fmt.Fprintf(w, `Success!`)

}


查看完整回答
反对 回复 2021-11-22
  • 3 回答
  • 0 关注
  • 305 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信