"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > URL로 인코딩된 POST 요청을 보낼 때 400 BAD REQUEST가 표시되는 이유는 무엇입니까?

URL로 인코딩된 POST 요청을 보낼 때 400 BAD REQUEST가 표시되는 이유는 무엇입니까?

2024년 12월 22일에 게시됨
검색:541

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

URL 인코딩 페이로드가 포함된 POST 요청

URL 인코딩 데이터가 포함된 POST 요청을 구성할 때 400 BAD가 발생하는 것이 일반적입니다. 서버가 페이로드를 이해할 수 없음을 나타내는 REQUEST 응답입니다. 이 문제는 일반적으로 페이로드가 잘못 제공될 때 발생합니다.

표준 라이브러리의 http.NewRequest(...) 메서드는 페이로드가 io.Reader 인터페이스를 구현해야 하는 세 번째 인수로 제공될 것으로 예상합니다. URL 인코딩 페이로드의 경우 이는 인코딩된 키-값 쌍의 문자열이어야 함을 의미합니다.

예제 코드:

URL 인코딩된 페이로드를 올바르게 전송하려면 http.NewRequest(...)를 사용하여 POST 요청으로 데이터를 전송하는 경우 다음 예를 고려하세요.

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

이 예에서는 URL로 인코딩된 페이로드가 io.Reader를 구현하는 strings.NewReader 함수에 제공됩니다. 그러면 요청이 적절하게 구성되어 전송됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3