>  기사  >  백엔드 개발  >  Multipart/Form-Data POST 요청을 사용할 때 301 Moved Permanently 오류가 발생하는 이유는 무엇입니까?

Multipart/Form-Data POST 요청을 사용할 때 301 Moved Permanently 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-26 22:19:29999검색

Why am I getting a 301 Moved Permanently Error when using Multipart/Form-Data POST requests?

Multipart/Form-Data POST

multipart/form-data를 사용하여 POST 데이터를 시도할 때 제공된 것과 같은 오류 메시지가 나타날 수 있습니다. 마주쳤다. 문제를 이해하려면 문제의 구성을 조사해야 합니다. 발생한 오류는 301 Moved Permanently 응답으로, 리소스가 영구적으로 리디렉션되었음을 나타냅니다. 이 문제는 multipart/form-data 요청에 대해 올바른 Content-Type 헤더가 설정되지 않은 경우에 자주 발생합니다.

이 문제를 해결하려면 Content-Type 헤더가 명시적으로 "multipart/form-data; POST 요청을 할 때 charset=UTF-8"입니다. 이 헤더는 요청에 multipart/form-data 프로토콜에 따라 형식이 지정된 텍스트 기반 데이터와 바이너리 데이터가 모두 포함되어 있음을 서버에 알립니다.

다음은 올바른 Content-Type 헤더를 성공적으로 설정하는 수정된 Go 코드입니다.

<code class="go">import (
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "mime/multipart"
    "net/http"
)

func NewPostWithMultipartFormData(url string, paramTexts map[string]string, paramFiles []FileItem) ([]byte, error) {
    // Initialize a buffer to write the multipart form data.
    buf := new(bytes.Buffer)
    // Create a new multipart writer.
    w := multipart.NewWriter(buf)

    // Add text parameters to the multipart form.
    for key, value := range paramTexts {
        field, err := w.CreateFormField(key)
        if err != nil {
            return nil, fmt.Errorf("error creating form field '%s': %v", key, err)
        }
        if _, err := field.Write([]byte(value)); err != nil {
            return nil, fmt.Errorf("error writing value to form field '%s': %v", key, err)
        }
    }

    // Add binary parameters to the multipart form.
    for _, file := range paramFiles {
        fileWriter, err := w.CreateFormFile(file.Key, file.FileName)
        if err != nil {
            return nil, fmt.Errorf("error creating form file '%s': %v", file.Key, err)
        }
        if _, err := fileWriter.Write(file.Content); err != nil {
            return nil, fmt.Errorf("error writing content to form file '%s': %v", file.Key, err)
        }
    }

    // Close the multipart writer.
    if err := w.Close(); err != nil {
        return nil, fmt.Errorf("error closing multipart writer: %v", err)
    }

    contentType := w.FormDataContentType()

    // Create a new POST request with the correct Content-Type header.
    req, err := http.NewRequest(http.MethodPost, url, buf)
    if err != nil {
        return nil, fmt.Errorf("error creating HTTP request: %v", err)
    }
    req.Header.Set("Content-Type", contentType)

    // Perform the HTTP request.
    client := http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, fmt.Errorf("error sending HTTP request: %v", err)
    }
    defer resp.Body.Close()

    // Read the response body.
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return nil, fmt.Errorf("error reading HTTP response body: %v", err)
    }

    return body, nil
}</code>

위 내용은 Multipart/Form-Data POST 요청을 사용할 때 301 Moved Permanently 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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