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

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

獲取 http 響應的 RAW 標頭

獲取 http 響應的 RAW 標頭

Go
桃花長相依 2023-06-01 09:55:35
如何像這樣將響應的原始標頭作為字符串獲?。篴lt-svc: quic=":443"; ma=2592000; v="44,43,39,35"cache-control: private, max-age=0content-encoding: brcontent-type: text/html; charset=UTF-8date: Tue, 08 Jan 2019 06:19:47 GMTexpires: -1server: gwsset-cookie: 1P_JAR=2019-01-08-06; expires=Thu, 07-Feb-2019 06:19:47 GMT; path=/; domain=.google.comset-cookie: SIDCC=ABtHo-HHNcja-cEEFEUXtBmLOdql4RTVMCWKGApEFFb8lWSAqaTF_fi0gDLoWaCzH3ogvEofah0; expires=Mon, 08-Apr-2019 06:19:47 GMT; path=/; domain=.google.com; priority=highstatus: 200set-cookie因為我想從響應標頭中獲取多個值。使用Http.Response.Header.Get("set-cookies")只返回最后一行。或者我怎樣才能得到多個cookie?
查看完整描述

3 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

如果您想要原始標頭,則需要編寫一些包裝器,以便在庫net.Conn解釋原始標頭之前為其捕獲原始標頭http。

但是您似乎并不真的需要原始標頭——甚至根本不需要完整標頭。如果您的目標只是讀取多個 cookie,那么最簡單的方法是使用Cookies響應中的方法。

這兩者之間的一個中間選項是讀取Header響應的整個字段。這將顯示完整的標頭,但不能保證其順序,并且將進行最少的解析(刪除換行符等),因此不能說這是真正的“原始”。但是,它確實通過將所有標頭值存儲在一個[]string.?因此,就這個問題而言,這應該是完全足夠的(盡管Response.Cookies如上所述,會更容易)。


查看完整回答
反對 回復 2023-06-01
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

在我看來,往返響應的最佳選擇是 httputil#DumpResponse:


package raw


import (

   "bufio"

   "bytes"

   "net/http"

   "net/http/httputil"

)


func encode(res *http.Response) ([]byte, error) {

   return httputil.DumpResponse(res, false)

}


func decode(data []byte) (*http.Response, error) {

   return http.ReadResponse(bufio.NewReader(bytes.NewReader(data)), nil)

}

或者,如果您只想要 cookie,您可以這樣做:


package raw


import (

   "encoding/json"

   "net/http"

)


func encode(res *http.Response) ([]byte, error) {

   return json.Marshal(res.Cookies())

}


func decode(data []byte) ([]http.Cookie, error) {

   var c []http.Cookie

   if e := json.Unmarshal(data, &c); e != nil {

      return nil, e

   }

   return c, nil

}

或者對于單個 cookie:


package raw


import (

   "encoding/json"

   "net/http"

)


func encode(res *http.Response, name string) ([]byte, error) {

   for _, c := range res.Cookies() {

      if c.Name == name {

         return json.Marshal(c)

      }

   }

   return nil, http.ErrNoCookie

}


func decode(data []byte) (*http.Cookie, error) {

   c := new(http.Cookie)

   if e := json.Unmarshal(data, c); e != nil {

      return nil, e

   }

   return c, nil

}

https://golang.org/pkg/net/http/httputil#DumpResponse


查看完整回答
反對 回復 2023-06-01
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

標準的 http 庫默認解析標頭。
使用 fasthttp(您需要重新編寫路由器和處理程序函數)將使您能夠獲取原始標頭。

查看完整回答
反對 回復 2023-06-01
  • 3 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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