Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在使用Go HTTP客户端时,我的HTTP POST请求会延迟60秒?_Http_Go_Post_Http Headers_Http Post - Fatal编程技术网

为什么在使用Go HTTP客户端时,我的HTTP POST请求会延迟60秒?

为什么在使用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网站

我的目标是在Golang中创建一个要求我首先使用HTTP请求登录的网站。实际上,我成功地发现我可以向网站发送一个post请求,并将表单数据写入请求正文。当我通过一个名为Postman的API开发软件进行测试时,响应是即时的,没有延迟。但是,当在Go中使用HTTP客户端执行请求时,每次都有一致的60秒延迟。我最终得到了一个登录页面,但对于我的程序,我需要几乎即时的响应

正如您在我的代码中所看到的,我已经尝试在请求中添加一些标题,如“连接”、“内容类型”、“用户代理”,因为我认为MaaaAybe网站可以告诉我是从程序请求的,并迫使我等待60秒以获得响应。添加这些头以使我的请求更合法(?)根本不起作用

是来自Go的HTTP客户端的延迟太慢,还是我形成HTTP POST请求的方式有问题?还有,我是否知道我的头上有什么东西,HTTP客户端在发送时正在重写它们

这是我的简单程序

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