gpt4 book ai didi

http.Client.Do 停止执行没有任何错误

转载 作者:IT王子 更新时间:2023-10-29 02:23:53 27 4
gpt4 key购买 nike

我遇到了 http 库中 Do 函数的奇怪行为。在我的程序中,我有一个 worker 正在阅读一个 channel 。在每个消息 worker 上调用一个发出 http 请求的函数。以下是函数:

func FetchUrlWithProxy(url string, proxy string) (*http.Response, error) {
proxyUrl, err := urllib.Parse(proxy) // [1]
if err != nil {
return nil, err
}

client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
request, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}

log.Println("try ", url) // [2]
response, err := client.Do(request)
log.Println("done ", url) // [3]

if err != nil { // [4]
return nil, err
}

return response, nil
}
  • [1] - 它只是 net/url 导入了这个名字。
  • [2] - 这行每时每刻都打印出来。
  • [3] - 此行绝不会在没有任何内容的情况下打印出来错误/ panic 。
  • [4] - 所以这种返回值检查是无用的。执行没有到这一步。

这种行为绝对不是我所期望的。但是,如果我删除代理使用并将 client 创建为 client := &http.Client{} 它将起作用。另一方面代理没有坏。我使用 curl 检查了它。怎么可能?

如果您需要,我会提供任何其他信息。

最佳答案

您的代码似乎有效 - 我怀疑您实际使用的代理发生了一些问题?

代码:

package main

import (
"log"
"net/http"
urllib "net/url"
)

func FetchUrlWithProxy(url string, proxy string) (*http.Response, error) {
proxyUrl, err := urllib.Parse(proxy) // [1]
if err != nil {
return nil, err
}

client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
request, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}

log.Println("try ", url) // [2]
response, err := client.Do(request)
log.Println("done ", url) // [3]

if err != nil { // [4]
return nil, err
}

return response, nil
}

func main() {
res, err := FetchUrlWithProxy("https://www.google.com", "https://www.google.com")
log.Printf("R %v E %v\n", res, err)
}

输出:

➜ go run p.go
2015/07/20 21:44:45 try https://www.google.com
2015/07/20 21:44:46 done https://www.google.com
2015/07/20 21:44:46 <nil> Get https://www.google.com: unexpected EOF

关于http.Client.Do 停止执行没有任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31512022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com