簡體   English   中英

在 Golang 中從 http.Get 讀取內容

[英]Reading content from http.Get in Golang

我很難從 Go 中的GET請求中讀取 XML。 我剛開始學習 Go,還沒有找到關於這個主題的任何資源。 我試過的:

response, err := http.Get(url)
if err != nil {
   log.Fatal(err)
} else {
   defer response.Body.Close()
   xml, _ := ioutil.ReadAll(response.Body)
   if err != nil {
      log.Fatal(err)
   }
}

_, err := io.Copy(os.Stdout, response.Body)有效,但我想存儲 XML 以供進一步處理。 任何幫助是極大的贊賞。

你試過的大多是好的。 改進它的幾件事:

http.Get()返回一個http.Response和一個可選的錯誤。 如果沒有錯誤,則僅表示 HTTP GET 操作成功,但服務器可能已響應錯誤文檔。 所以你還是要檢查響應HTTP狀態碼。

此外io.ReadAll()也返回一個錯誤(除了讀取數據),不要忘記檢查。

讓我們將它包裝在一個函數中:

func getXML(url string) (string, error) {
    resp, err := http.Get(url)
    if err != nil {
        return "", fmt.Errorf("GET error: %v", err)
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return "", fmt.Errorf("Status error: %v", resp.StatusCode)
    }

    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return "", fmt.Errorf("Read body: %v", err)
    }

    return string(data), nil
}

測試/使用上述功能:

if xmlStr, err := getXML("http://somehost.com/some.xml"); err != nil {
    log.Printf("Failed to get XML: %v", err)
} else {
    log.Println("Received XML:")
    log.Println(xmlStr)
}

另請注意,獲取任何其他響應的內容是相同的,因此不值得對string轉換和返回類型進行“編碼”。 這個比較通用:

func getContent(url string) ([]byte, error) {
    resp, err := http.Get(url)
    if err != nil {
        return nil, fmt.Errorf("GET error: %v", err)
    }
    defer resp.Body.Close()

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("Status error: %v", resp.StatusCode)
    }

    data, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return nil, fmt.Errorf("Read body: %v", err)
    }

    return data, nil
}

使用它來獲取 XML 文檔:

if data, err := getContent("http://somehost.com/some.xml"); err != nil {
    log.Printf("Failed to get XML: %v", err)
} else {
    log.Println("Received XML:")
    log.Println(string(data))
}

暫無
暫無

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

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