Heim  >  Artikel  >  Backend-Entwicklung  >  So deaktivieren Sie die Chunked-Codierung in Golang

So deaktivieren Sie die Chunked-Codierung in Golang

PHPz
PHPzOriginal
2023-04-04 16:13:14749Durchsuche

Wenn Sie Golang zum Senden von HTTP-Anfragen verwenden und der Server eine Chunked-codierte Antwort zurückgibt, müssen Sie beim Lesen des Antworttextes darauf achten, die Chunked-Codierung zu deaktivieren, da sonst unvollständige Daten gelesen werden.

Chunked-Codierung ist eine Übertragungsmethode, die Daten in mehrere Blöcke aufteilt und diese sendet. Jeder Block enthält die Länge des Datenblocks. Nachdem alle Blöcke übertragen wurden, wird ein Block der Länge 0 gesendet, um das Ende der Übertragung anzuzeigen.

In Golang unterstützen häufig verwendete Bibliotheken auch Chunked-codierte http-Antworten. Wenn der Server beispielsweise beim Senden einer Anfrage über das http-Paket der Standardbibliothek eine in Chunks codierte Antwort zurückgibt, wird der Antworttext automatisch verarbeitet und gelesen. Wir müssen nur den Antworttext lesen:

resp, err := http.Get("http://example.com")
if err != nil {
    // handle error
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    // handle error
}

Es ​​gibt jedoch Fälle, in denen die Chunked-Codierung manuell deaktiviert werden muss. Beispielsweise ist beim Lesen des Antworttexts ein Fehler aufgetreten oder es ist erforderlich, einen Teil des Antworttexts zu lesen, eine Pause einzulegen, eine Verarbeitung durchzuführen und dann mit dem Lesen fortzufahren.

Um die Chunked-Codierung manuell zu deaktivieren, können wir das Feld TransferEncoding im Paket net/http verwenden. Wenn das TransferEncoding-Feld in der Anfrage oder Antwort „Chunked“ enthält, bedeutet dies, dass Chunked-Codierung verwendet wird. Wir können das Feld TransferEncoding auf leer setzen, um die Chunked-Codierung zu deaktivieren:

req, err := http.NewRequest(http.MethodGet, "http://example.com", nil)
if err != nil {
    // handle error
}

resp, err := http.DefaultClient.Do(req)
if err != nil {
    // handle error
}
defer resp.Body.Close()

// check if the response is chunked
if resp.TransferEncoding != nil && len(resp.TransferEncoding) > 0 && resp.TransferEncoding[0] == "chunked" {
    resp.TransferEncoding = nil
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    // handle error
}

Im obigen Code prüfen wir zunächst, ob die Antwort Chunked-Codierung verwendet. Wenn ja, setzen Sie das Feld TransferEncoding auf leer und lesen Sie dann den Antworttext.

Zusammenfassend lässt sich sagen, dass Sie bei der Verarbeitung von Chunked-codierten HTTP-Antworten darauf achten müssen, die Chunked-Codierung zu deaktivieren. Die Chunked-Codierung kann mithilfe des Felds „TransferEncoding“ manuell deaktiviert werden.

Das obige ist der detaillierte Inhalt vonSo deaktivieren Sie die Chunked-Codierung in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn