Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Hands on the Standard Library HTTP in Golang

Things on this page are fragmentary and immature notes/thoughts of the author. Please read with your own judgement!

import "io/ioutil"
import "io"
import "net/http"
import "strings"
import "os"
import "log"
resp, err := http.Get("https://www.apache.org/dyn/closer.lua/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz")
if err != nil {
    log.Fatal(err)
}
resp
&{200 OK 200 HTTP/2.0 2 0 map[Accept-Ranges:[bytes] Cache-Control:[private, max-age=3600] Content-Type:[text/html] Date:[Sun, 26 Jun 2022 20:38:53 GMT] Expires:[Sun, 26 Jun 2022 21:38:53 GMT] Server:[Apache] Vary:[Accept-Encoding] Via:[1.1 varnish, 1.1 varnish] X-Cache:[MISS, MISS] X-Cache-Hits:[0, 0] X-Served-By:[cache-hel1410025-HEL, cache-bfi-krnt7300035-BFI] X-Timer:[S1656275934.713944,VS0,VE165]] 0xc0001744b0 -1 [] false true map[] 0xc000296000 0xc0000ea370}
body, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
resp.StatusCode
200
if err != nil {
    log.Fatal(err)
}
html := string(body)
html
strings.Index(html, "<strong>")
21399
strings.Index(html, "</strong>")
21477
html[21399:21477]
<strong>https://dlcdn.apache.org/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz
url := html[21399+8:21477]
url
https://dlcdn.apache.org/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz
func httpGetAsString(url string) string {
	resp, err := http.Get(url)
	if err != nil {
		log.Fatal(err)
	}
	body, err := ioutil.ReadAll(resp.Body)
	resp.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	if resp.StatusCode > 399 {
		log.Fatal("HTTP request got an error response with the status code ", resp.StatusCode)
	}
    return string(body)
}
url := "https://api.github.com/repos/legendu-net/icon/releases/tags/v0.6.0"
httpGetAsString(url)
{"url":"https://api.github.com/repos/legendu-net/icon/releases/72107224","assets_url":"https://api.github.com/repos/legendu-net/icon/releases/72107224/assets","upload_url":"https://uploads.github.com/repos/legendu-net/icon/releases/72107224/assets{?name,label}","html_url":"https://github.com/legendu-net/icon/releases/tag/v0.6.0","id":72107224,"author":{"login":"dclong","id":824507,"node_id":"MDQ6VXNlcjgyNDUwNw==","avatar_url":"https://avatars.githubusercontent.com/u/824507?v=4","gravatar_id":"","url":"https://api.github.com/users/dclong","html_url":"https://github.com/dclong","followers_url":"https://api.github.com/users/dclong/followers","following_url":"https://api.github.com/users/dclong/following{/other_user}","gists_url":"https://api.github.com/users/dclong/gists{/gist_id}","starred_url":"https://api.github.com/users/dclong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dclong/subscriptions","organizations_url":"https://api.github.com/users/dclong/orgs","repos_url":"https://api.github.com/users/dclong/repos","events_url":"https://api.github.com/users/dclong/events{/privacy}","received_events_url":"https://api.github.com/users/dclong/received_events","type":"User","site_admin":false},"node_id":"RE_kwDOHkKAZc4ETETY","tag_name":"v0.6.0","target_commitish":"main","name":"icon v0.6.0","draft":false,"prerelease":false,"created_at":"2022-07-15T16:17:03Z","published_at":"2022-07-15T16:17:30Z","assets":[{"url":"https://api.github.com/repos/legendu-net/icon/releases/assets/71690405","id":71690405,"node_id":"RA_kwDOHkKAZc4EReil","name":"icon-v0.6.0-darwin-amd64.tar.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":4991511,"download_count":1,"created_at":"2022-07-15T16:18:13Z","updated_at":"2022-07-15T16:18:13Z","browser_download_url":"https://github.com/legendu-net/icon/releases/download/v0.6.0/icon-v0.6.0-darwin-amd64.tar.gz"},{"url":"https://api.github.com/repos/legendu-net/icon/releases/assets/71690408","id":71690408,"node_id":"RA_kwDOHkKAZc4EReio","name":"icon-v0.6.0-darwin-amd64.tar.gz.md5","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"content_type":"text/plain","state":"uploaded","size":33,"download_count":0,"created_at":"2022-07-15T16:18:14Z","updated_at":"2022-07-15T16:18:14Z","browser_download_url":"https://github.com/legendu-net/icon/releases/download/v0.6.0/icon-v0.6.0-darwin-amd64.tar.gz.md5"},{"url":"https://api.github.com/repos/legendu-net/icon/releases/assets/71690400","id":71690400,"node_id":"RA_kwDOHkKAZc4EReig","name":"icon-v0.6.0-darwin-arm64.tar.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":4811713,"download_count":1,"created_at":"2022-07-15T16:18:11Z","updated_at":"2022-07-15T16:18:11Z","browser_download_url":"https://github.com/legendu-net/icon/releases/download/v0.6.0/icon-v0.6.0-darwin-arm64.tar.gz"},{"url":"https://api.github.com/repos/legendu-net/icon/releases/assets/71690403","id":71690403,"node_id":"RA_kwDOHkKAZc4EReij","name":"icon-v0.6.0-darwin-arm64.tar.gz.md5","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"content_type":"text/plain","state":"uploaded","size":33,"download_count":0,"created_at":"2022-07-15T16:18:12Z","updated_at":"2022-07-15T16:18:12Z","browser_download_url":"https://github.com/legendu-net/icon/releases/download/v0.6.0/icon-v0.6.0-darwin-arm64.tar.gz.md5"},{"url":"https://api.github.com/repos/legendu-net/icon/releases/assets/71690355","id":71690355,"node_id":"RA_kwDOHkKAZc4ERehz","name":"icon-v0.6.0-linux-amd64.tar.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":5186711,"download_count":8,"created_at":"2022-07-15T16:18:05Z","updated_at":"2022-07-15T16:18:05Z","browser_download_url":"https://github.com/legendu-net/icon/releases/download/v0.6.0/icon-v0.6.0-linux-amd64.tar.gz"},{"url":"https://api.github.com/repos/legendu-net/icon/releases/assets/71690359","id":71690359,"node_id":"RA_kwDOHkKAZc4EReh3","name":"icon-v0.6.0-linux-amd64.tar.gz.md5","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"content_type":"text/plain","state":"uploaded","size":33,"download_count":0,"created_at":"2022-07-15T16:18:06Z","updated_at":"2022-07-15T16:18:06Z","browser_download_url":"https://github.com/legendu-net/icon/releases/download/v0.6.0/icon-v0.6.0-linux-amd64.tar.gz.md5"},{"url":"https://api.github.com/repos/legendu-net/icon/releases/assets/71690414","id":71690414,"node_id":"RA_kwDOHkKAZc4EReiu","name":"icon-v0.6.0-linux-arm64.tar.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":4843937,"download_count":0,"created_at":"2022-07-15T16:18:22Z","updated_at":"2022-07-15T16:18:23Z","browser_download_url":"https://github.com/legendu-net/icon/releases/download/v0.6.0/icon-v0.6.0-linux-arm64.tar.gz"}],"tarball_url":"https://api.github.com/repos/legendu-net/icon/tarball/v0.6.0","zipball_url":"https://api.github.com/repos/legendu-net/icon/zipball/v0.6.0","body":""}

Download Files Using “net/http”

resp, err := http.Get(url)
if err != nil {
    log.Fatal(err)
}
// Create the file
out, err := os.Create("spark.tgz")
if err != nil {
    log.Fatal(err)
}
// Write the body to file
_, err = io.Copy(out, resp.Body)
err