使用「Content-Type: multipart/form-data」發布
嘗試使用「Content-Type:」發送POST 請求時multipart /form-data”,您可能會遇到類似“[301 301 Moved Permanently]”的錯誤訊息。當您嘗試將位元組參數和字串參數POST 到API 時,通常會出現此問題。
要解決此錯誤並成功使用multipart/form-data 執行POST 請求,您可以修改Go 程式碼,如下所示:
<code class="go">func NewPostFile(url string, paramTexts map[string]interface{}, paramFile FileItem) ([]byte, error) { // Create a multipart body buffer and writer bodyBuf := &bytes.Buffer{} bodyWriter := multipart.NewWriter(bodyBuf) // Add string parameters for k, v := range paramTexts { bodyWriter.WriteField(k, v.(string)) } // Add file parameter fileWriter, err := bodyWriter.CreateFormFile(paramFile.Key, paramFile.FileName) if err != nil { return nil, err } fileWriter.Write(paramFile.Content) // Set content type contentType := bodyWriter.FormDataContentType() // Close the writer bodyWriter.Close() resp, err := http.Post(url, contentType, bodyBuf) if err != nil { return nil, err } defer resp.Body.Close() // Handle response status if resp.StatusCode < 200 || resp.StatusCode >= 300 { b, _ := ioutil.ReadAll(resp.Body) return nil, fmt.Errorf("[%d %s]%s", resp.StatusCode, resp.Status, string(b)) } // Read response data respData, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } return respData, nil } // Define FileItem type to represent file parameters type FileItem struct { Key string // e.g. "image_content" FileName string // e.g. "test.jpg" Content []byte // Byte array of the file }</code>
此更新的程式碼使用帶有多部分編寫器的multipart /form-data 內容類型來正確建構POST 請求。
以上是如何解決 Go 中使用「Content-Type: multipart/form-data」發佈時出現「[301 301 永久移動]」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!