登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-16 16:15:37 342浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《从文件读取 HTTP 标头的最有效方法?》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我正在寻找一种有效的方法来从文本文件中读取 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") 中似乎有些过头了。

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


解决方案


如果您只想定义一些标头,另一种选择是在 json 文件中定义标头并应用以下代码(不包括文件读取):

var jsonmap map[string]string
err = 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"
}

net/http 有一个方法 ReadRequest,可以从 bufio.reader 创建新的 request 对象。假设您的文件包含真正的 http 请求(而不是仅由 key: value 行组成的请求部分),您需要做的就是从文件创建一个新的 bufio.reader ,即像这样(省略错误处理) ):

rdr,_ := os.Open("req.txt")
req,_ := http.ReadRequest(bufio.NewReader(rdr))
fmt.Printf("%+v\n", req)

到这里,我们也就讲完了《从文件读取 HTTP 标头的最有效方法?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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