2016-04-15 4 views
0

ich tue ein http request wie diese:um Geld zu Seite http Anfrage golang

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

Dann die ich erhalte header link:

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

Was mich ein Ergebnis wie dieses gibt:

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

Frage

Wie kann ich dies besser lesbar machen? Ich versuche speziell, die last Seite zu bekommen, aber first und next Seite sollte auch nützlich sein.

Ich versuchte mit Splits und Regular expressions ohne Erfolg.

+0

Welchen Teil benötigen Sie von der Verbindungszeichenfolge? – icza

Antwort

1

Sind Sie sicher, dass das Format der Ausgabe ist? Es sieht so aus, als ob einer von ; ein , sein sollte. Ein einzelner Link http-Header mit mehreren Werten, sollte das Format sein (man beachte das Komma nach „prev“)

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

Die Reihenfolge für jeden Link auf , aufgeteilt werden sollte. Teilen Sie jeden Link auf ; für Werte oder Schlüssel/Wert-Paare, und dann, wenn sie Wert <(.*=.*)> übereinstimmen, verwerfen Sie die spitzen Klammern und verwenden Sie den restlichen Schlüssel und Wert.

1

Hier ist eine Lösung, wie Sie Ihre Seitenzahlen anpassen können.

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) 
} 

Später bearbeiten: Sie können sich wahrscheinlich auch das XML-Paket verwenden, um das gleiche Ergebnis zu erzielen, indem diese Ausgabe als XML-Parsing, aber Sie müßten Ihre Ausgabe ein wenig verändern.