"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué recibo una SOLICITUD 400 MALA cuando envío solicitudes POST codificadas en URL?

¿Por qué recibo una SOLICITUD 400 MALA cuando envío solicitudes POST codificadas en URL?

Publicado el 2024-12-22
Navegar:375

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

Solicitud POST con carga útil codificada en URL

Al construir una solicitud POST con datos codificados en URL, es común encontrar un 400 BAD SOLICITUD de respuesta, que indica que el servidor no puede comprender la carga útil. Este problema suele surgir cuando la carga útil se proporciona incorrectamente.

El método http.NewRequest(...) de la biblioteca estándar espera que la carga útil se proporcione como tercer argumento, que debería implementar la interfaz io.Reader. En el caso de una carga útil codificada en URL, esto significa que debe ser una cadena de pares clave-valor codificados.

Código de ejemplo:

Para enviar correctamente una carga útil codificada en URL datos como una solicitud POST usando http.NewRequest(...), considere el siguiente ejemplo:

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

En este ejemplo, la carga útil codificada en URL se proporciona a la función strings.NewReader, que implementa io.Reader. Luego, la solicitud se construye y envía correctamente.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3