簡體   English   中英

http.Client.Do停止執行,沒有任何錯誤

[英]http.Client.Do stops execution without any errors

我在http庫中遇到了Do函數的怪異行為。 在我的程序中,有一個工人正在閱讀頻道。 在每個消息上,工作者調用一個發出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] -此行顯示eveytime。
  • [3] -此行絕不會出現任何錯誤/驚慌。
  • [4] -這樣對返回值的檢查是無用的。 執行尚未達到這一點。

這種行為絕對不是我所期望的。 但是,如果我刪除代理使用情況並將client client := &http.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM