2016-04-15 51 views
0

我做一個http request像這樣的:獲取最後一個頁面的HTTP請求golang

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沒有成功。

+0

您需要從鏈接字符串中選擇哪部分? – icza

回答

1

你確定這是輸出格式嗎?它看起來像;之一應該是,。 具有多個值的單個鏈路http頭,應該是格式(通知「分組」之後的逗號)

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

順序應上,被分割爲每個鏈路的。將值爲;的每個鏈接分爲值或鍵值對,然後如果它們的值匹配爲<(.*=.*)>,則放棄尖括號並使用剩餘的鍵和值。

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,但你需要改變你的輸出位。