我正在做这样的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
页面,但first
和next
页面也应该有用。
我尝试使用Splits
和Regular expressions
但没有成功。
答案 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"
对于每个链接,订单应在,
上拆分。拆分;
上的每个链接以获取值或键值对,然后如果它们的值匹配<(.*=.*)>
,则丢弃尖括号并使用剩余的键和值。