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

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

Linda Hamilton
Linda Hamilton원래의
2024-12-21 22:19:19884검색

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 함수에 제공됩니다. 그러면 요청이 올바르게 구성되어 전송됩니다.

위 내용은 URL로 인코딩된 POST 요청을 보낼 때 400 BAD REQUEST가 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.