ホームページ  >  記事  >  バックエンド開発  >  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 応答で、リソースが永続的にリダイレクトされたことを示します。これは、正しい Content-Type ヘッダーが multipart/form-data リクエストに設定されていない場合によく発生します。

この問題を解決するには、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。