package util import ( "crypto/tls" "io/ioutil" "log" "net/http" "os" "path/filepath" "time" ) func FetchFileFromURL(url string) (filename string, err error) { var t time.Time tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{ //CheckRedirect: redirectPolicyFunc, Transport: tr, } resp, err := client.Get(url) defer resp.Body.Close() if err != nil { return } mtime := resp.Header.Get("last-modified") if len(mtime) > 0 { t, err = time.Parse(http.TimeFormat, mtime) if err != nil { return } } else { log.Println("Last-Modified not present. Using current time") t = time.Now() } _, url_filename := filepath.Split(url) log.Println(resp) bytes, err := ioutil.ReadAll(resp.Body) if err != nil { return } err = ioutil.WriteFile(filepath.Join(os.TempDir(), url_filename), bytes, 0644) if err != nil { return } err = os.Chtimes(filepath.Join(os.TempDir(), url_filename), t, t) // lastly, return return filepath.Join(os.TempDir(), url_filename), nil }