I Client bin mit einem http behandelt einen json Körper, zu erhalten und es zu einem Byte-Array wieEOF Fehlerbeendigung zu verursachen, wenn in Verwendung http.Client.Get Verfahren und Body.Read() Methode in golang
client := new(http.Client)
client.Timeout = time.Second * 10
GetJobJson, err := client.Get(joblocation.String()) //where joblocation is of type *url.Url
if err != nil {
errorlog.Err.Println("Error getting job from", joblocation.String(), err)
return false, http.StatusBadRequest, nil
}
buff := make([]byte, GetJobJson.ContentLength)
length, err := GetJobJson.Body.Read(buff) //This returns an EOF error
if err != nil {
errorlog.Err.Println("Error reading request body of length", length, "vs contentlength", GetJobJson.ContentLength, err)
return false, http.StatusBadRequest, nil
}
gelesen
In dem obigen Code, GetJobJson.Body
ist vom Typ io.ReadCloser
, die Reader
implementiert, Read
Verfahren mit, die ich hier als
length, err := GetJobJson.Body.Read(buff)
Aber da ich Fehler am Umgang hier verwende, ist es ein Fehler zurückgegeben, die besagt, EOF.
Der HTTP-Endpunkt, an den ich die Anfrage sende, führt einen Apache-Server aus und erwähnt ihn hier, da ich nicht sicher bin, ob es darauf ankommt.
Wenn ich den Fehler nicht behandle, bekomme ich die komplette JSON-Stelle, die dort auf dem Remote-Server ist, und das Programm funktioniert wie erwartet.
Was ist der beste Weg, damit umzugehen? Ist die Read
Methode, die ich verwende, schlecht für diese Situation? Bitte beraten.
Vielen Dank.
EOF bedeutet, dass Sie den gesamten Stream lesen. Wenn Sie erhalten haben, was Sie erwartet haben, warum geben Sie diesen EOF als Fehler zurück? (Sie sollten auch beachten, dass es hier möglich ist, Chunked-Antworten zu erhalten, die keinen ContentLength haben) – JimB
Danke @JimB. Ich gebe EOF nicht zurück. Es wird vom Webserver zurückgegeben, von dem ich den Inhalt abrufe. Was ist der beste Weg, es dann zu tun? Kann ich nur EOF ignorieren und damit umgehen? – nohup
@ JimB: Könnte es sein, dass der tatsächliche Inhalt und die Inhaltslänge unterschiedlich sind? Ich habe eine 'unsafe.Sizeof (buff)' gemacht, die eine Größe kleiner als die 'ContentLength' Größe ergibt. – nohup