我认为问题在于网址值。当我将其发布到服务器时,我将收到一个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)
答案 0 :(得分:2)
您没有发送内容协商标头。
Content-Type标头字段指定了 通过提供媒体类型和子类型标识符,以及提供某些特定信息可能需要的辅助信息,来创建实体的主体 媒体类型。在媒体类型和子类型名称之后,标头字段的其余部分只是一组参数,以attribute = value表示法指定。参数的顺序并不重要。
在这种情况下,内容以application/x-www-form-urlencoded
进行编码,因此必须使用Content-Type
标头将其传送到服务器
请在发送请求之前添加以下内容
r.Header.Add("Content-Type", "application/x-www-form-urlencoded")