发出自定义帖子请求时出现400错误的请求

时间:2018-10-27 01:44:13

标签: http go

我认为问题在于网址值。当我将其发布到服务器时,我将收到一个400错误的请求:告诉我我需要一个电子邮件值。这使我相信,editForm中的电子邮件值被错误地解析,或者first_value被解析,然后“污染”其余的值。我已经看到了这一点:Make a URL-encoded POST request using `http.NewRequest(...)`,并相信我做对了所有事情,但这使我失望。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
SetEnvIf CF-IPCountry "(.*)$" Country=$1
RewriteCond %(ENV:Country) CA
RewriteRule ^(.*)$ https://ca.example.com/$1 [R,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

我已经仔细检查了应该调用的表单数据,但是看不到错误。供参考,此python代码将起作用。

editForm := url.Values{}
editForm.Add("first_name", "supercool")
editForm.Add("email", "wow@example.com")
editForm.Add("username", "foo")

req, err := http.NewRequest(http.MethodPost, urlEndpoint, strings.NewReader(editForm.Encode()))
if err != nil {
    log.Fatalln(err)
}
client := http.Client{}
resp, err := client.Do(req)

1 个答案:

答案 0 :(得分:2)

您没有发送内容协商标头。

内容类型

  

Content-Type标头字段指定了   通过提供媒体类型和子类型标识符,以及提供某些特定信息可能需要的辅助信息,来创建实体的主体   媒体类型。在媒体类型和子类型名称之后,标头字段的其余部分只是一组参数,以attribute = value表示法指定。参数的顺序并不重要。

在这种情况下,内容以application/x-www-form-urlencoded进行编码,因此必须使用Content-Type标头将其传送到服务器

请在发送请求之前添加以下内容

 r.Header.Add("Content-Type", "application/x-www-form-urlencoded")