"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que estou recebendo 400 BAD REQUEST ao enviar solicitações POST codificadas em URL?

Por que estou recebendo 400 BAD REQUEST ao enviar solicitações POST codificadas em URL?

Publicado em 2024-12-22
Navegar:398

Why am I getting a 400 BAD REQUEST when sending URL-encoded POST requests?

Solicitação POST com carga útil codificada em URL

Ao construir uma solicitação POST com dados codificados em URL, é comum encontrar um 400 BAD Resposta REQUEST, indicando que o servidor não consegue entender a carga útil. Esse problema normalmente surge quando a carga útil é fornecida incorretamente.

O método http.NewRequest(...) da biblioteca padrão espera que a carga útil seja fornecida como o terceiro argumento, que deve implementar a interface io.Reader. No caso de carga útil codificada em URL, isso significa que deve ser uma sequência de pares de valores-chave codificados.

Código de exemplo:

Para enviar corretamente a carga codificada em URL dados como uma solicitação POST usando http.NewRequest(...), considere o seguinte exemplo:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    apiUrl := "https://api.com"
    resource := "/user/"
    data := url.Values{}
    data.Set("name", "foo")
    data.Add("surname", "bar")

    u, _ := url.ParseRequestURI(apiUrl   resource)
 
    client := &http.Client{}
    r, _ := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode()))
    r.Header.Add("Authorization", "auth_token=\"XXXXXXX\"")
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, _ := client.Do(r)
    fmt.Println(resp.Status)
    bodyBytes, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(bodyBytes))
}

Neste exemplo, a carga útil codificada em URL é fornecida para a função strings.NewReader, que implementa io.Reader. A solicitação é então construída e enviada corretamente.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3