为什么在使用Go HTTP客户端时,我的HTTP POST请求会延迟60秒?
我的目标是在Golang中创建一个要求我首先使用HTTP请求登录的网站。实际上,我成功地发现我可以向网站发送一个post请求,并将表单数据写入请求正文。当我通过一个名为Postman的API开发软件进行测试时,响应是即时的,没有延迟。但是,当在Go中使用HTTP客户端执行请求时,每次都有一致的60秒延迟。我最终得到了一个登录页面,但对于我的程序,我需要几乎即时的响应 正如您在我的代码中所看到的,我已经尝试在请求中添加一些标题,如“连接”、“内容类型”、“用户代理”,因为我认为MaaaAybe网站可以告诉我是从程序请求的,并迫使我等待60秒以获得响应。添加这些头以使我的请求更合法(?)根本不起作用 是来自Go的HTTP客户端的延迟太慢,还是我形成HTTP POST请求的方式有问题?还有,我是否知道我的头上有什么东西,HTTP客户端在发送时正在重写它们 这是我的简单程序为什么在使用Go HTTP客户端时,我的HTTP POST请求会延迟60秒?,http,go,post,http-headers,http-post,Http,Go,Post,Http Headers,Http Post,我的目标是在Golang中创建一个要求我首先使用HTTP请求登录的网站。实际上,我成功地发现我可以向网站发送一个post请求,并将表单数据写入请求正文。当我通过一个名为Postman的API开发软件进行测试时,响应是即时的,没有延迟。但是,当在Go中使用HTTP客户端执行请求时,每次都有一致的60秒延迟。我最终得到了一个登录页面,但对于我的程序,我需要几乎即时的响应 正如您在我的代码中所看到的,我已经尝试在请求中添加一些标题,如“连接”、“内容类型”、“用户代理”,因为我认为MaaaAybe网站
package main
import (
"bytes"
"fmt"
"mime/multipart"
"net/http"
"net/http/cookiejar"
"os"
)
func main() {
url := "https://easypronunciation.com/en/log-in"
method := "POST"
payload := &bytes.Buffer{}
writer := multipart.NewWriter(payload)
_ = writer.WriteField("email", "foo@bar.com")
_ = writer.WriteField("password", "*********")
_ = writer.WriteField("persistent_login", "on")
_ = writer.WriteField("submit", "")
err := writer.Close()
if err != nil {
fmt.Println(err)
}
cookieJar, _ := cookiejar.New(nil)
client := &http.Client{
Jar: cookieJar,
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
}
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("Connection", "Keep-Alive")
req.Header.Set("Accept-Language", "en-US")
req.Header.Set("User-Agent", "Mozilla/5.0")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
}
defer res.Body.Close()
f, err := os.Create("response.html")
defer f.Close()
res.Write(f)
}
我怀疑,这也是go客户端库。我建议打印出不同组件的延迟,看看60秒延迟是否/在哪里。我也会替换并尝试不同的URL,这绝对不是
http.Client
太慢。这可能是许多其他潜在的原因,从网络到请求大小到服务器/代理/负载平衡器/等等。也许使用多部分/表单数据请求正文而不是网站使用的应用程序/x-www-form-urlencoded请求正文会有问题。耶,伙计!这就是问题所在!将我的有效负载和内容类型更改为urlencoded thingy:服务器处理延迟从~60200ms降至~175ms