2016-04-15 12 views
0

を取得http request 1このような:私がやっている最後のページの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ヘッダーフォーマットでなければならない(「PREV」の後にカンマを注意)

<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パッケージを使用することができますが、あなたは出力ビットを変換する必要があります。

関連する問題