Multipart/Form-Data POST
尝试使用 multipart/form-data 发布数据时,可能会出现类似所提供的错误消息遭遇。理解问题需要检查问题的构成。遇到的错误是 301 Moved Permanently 响应,表明资源已被永久重定向。当未为 multipart/form-data 请求设置正确的 Content-Type 标头时,通常会发生这种情况。
要解决此问题,请确保 Content-Type 标头显式设置为“multipart/form-data;”发出 POST 请求时,charset=UTF-8”。此标头通知服务器请求包含根据 multipart/form-data 协议格式化的基于文本和二进制数据。
下面是正确的 Go 代码,成功设置了正确的 Content-Type 标头:
<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中文网其他相关文章!

Interfaceand -polymormormormormormingingoenhancecodereusability and Maintainability.1)DewineInterfaceSattherightabStractractionLevel.2)useInterInterFacesForceFordEffeldIndentientIndoction.3)ProfileCodeTomanagePerformanceImpacts。

本文讨论了GO中的数组和切片之间的差异,重点是尺寸,内存分配,功能传递和用法方案。阵列是固定尺寸的,分配的堆栈,而切片是动态的,通常是堆积的,并且更灵活。

本文说明了如何在GO中创建和初始化数组,讨论数组和切片之间的差异,并解决了数组的最大尺寸限制。数组与切片:固定与动态,值与参考类型。

文章讨论了GO中结构的语法和初始化,包括字段命名规则和结构嵌入。主要问题:如何有效地在GO编程中使用结构。(字符:159)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中