猿问

从文件中读取 HTTP 标头的最有效方法?

我正在寻找一种有效的方法来从文本文件中读取 HTTP 标头,以便稍后使用 HTTP 请求发送。考虑以下代码(目前包含基本的 net/http 请求功能):


func MakeRequest(target string, method string) {

client := &http.Client{}

req, _ := http.NewRequest(method, target, nil)


//Headers manually..

req.Header.Add("If-None-Match", `some value`)


response, _ := client.Do(req)

body, _ := ioutil.ReadAll(response.Body)

fmt.Println(string(body))

}

我开始像这样使用 ioutil.ReadFile:


func main() {

data, _ := ioutil.ReadFile("/opt/tests/req.txt")

fmt.Print(string(data))

}

但是拿这个文本,用一些指示符(比如“:”)分割它,然后将信息放在每个标题的 req.Header.Add("var1", "var2") 中似乎是一个过度杀戮。


问题:有什么更好的方法可以从文本文件中发送带有标头的 HTTP 请求?


qq_笑_17
浏览 136回答 2
2回答

拉风的咖菲猫

net/http有一个方法ReadRequest,它可以Request从一个bufio.Reader. 假设您的文件包含一个真正的 HTTP 请求(而不是仅由带有 的行组成的请求部分key: value),您需要做的就是bufio.Reader从文件创建一个新的,即像这样(省略错误处理):rdr,_ := os.Open("req.txt")req,_ := http.ReadRequest(bufio.NewReader(rdr))fmt.Printf("%+v\n", req)

猛跑小猪

如果您只想定义一些标头,另一种选择是在 Json 文件中定义标头并应用以下代码(不包括文件读取):var jsonMap map[string]stringerr = json.Unmarshal(jsonBytesFromFile, &jsonMap)if err != nil {    log.Fatal("unable to parse json: ", err)}for k, v := range jsonMap {    log.Printf("setting Header : %s : %s", k, v)    responseWriter.Header().Add(k, v) // you may prefer Set()}json 看起来像这样:{     "Content-type": "text/plain",    "Cache-Control": "only-if-cached"}
随时随地看视频慕课网APP

相关分类

Go
我要回答