亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 348 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號