获取最后一页http请求golang

时间:2016-04-15 01:07:20

标签: http go

我正在做这样的http request

resp, err := http.Get("http://example.com/")

然后我得到header link

link := resp.Header.Get("link")

这给了我这样的结果:

<page=3>; rel="next",<page=1>; rel="prev";<page=5>; rel="last"

问题

如何以更清晰的方式解析这个问题?我特意尝试获取last页面,但firstnext页面也应该有用。

我尝试使用SplitsRegular expressions但没有成功。

2 个答案:

答案 0 :(得分:1)

以下是如何匹配您的页码的解决方案。

http://play.golang.org/p/kzurb38Fwx

text := `<page=3>; rel="next",<page=1>; rel="prev";<page=2>; rel="last"`
re := regexp.MustCompile(`<page=([0-9]+)>; rel="next",<page=([0-9]+)>; rel="prev";<page=([0-9]+)>; rel="last"`)
matches:= re.FindStringSubmatch(text)
if matches != nil {
    next := matches[1]
    prev := matches[2]
    last := matches[3]
    fmt.Printf("next = %s, prev = %s, last = %s\n", next, prev, last)
}

稍后编辑:您也可以使用xml包来实现相同的结果,方法是将该输出解析为XML,但您需要稍微转换输出。

答案 1 :(得分:1)

你确定这是输出的格式吗?看起来;中的一个应该是,。 具有多个值的单个链接http标头应具有格式(注意&#34之后的逗号; prev&#34;)

<page=3>; rel="next",<page=1>; rel="prev",<page=5>; rel="last"

对于每个链接,订单应在,上拆分。拆分;上的每个链接以获取值或键值对,然后如果它们的值匹配<(.*=.*)>,则丢弃尖括号并使用剩余的键和值。