github.com/fitzoh/maven-push-plugin@v0.4.0/download.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"net/http"
     7  	"os"
     8  )
     9  
    10  func DownloadFile(url string, destination string, username string, password string) error {
    11  	output, err := os.Create(destination)
    12  	if err != nil {
    13  		return fmt.Errorf("failed to create destination file %s, %+v", destination, err)
    14  	}
    15  	defer output.Close()
    16  
    17  	request, err := http.NewRequest(http.MethodGet, url, nil)
    18  	if err != nil {
    19  		return fmt.Errorf("failed to create request, %+v", err)
    20  	}
    21  	if len(username) != 0 {
    22  		request.SetBasicAuth(username, password)
    23  	}
    24  
    25  	response, err := http.DefaultClient.Do(request)
    26  	if err != nil {
    27  		return fmt.Errorf("failed to download file from %s, %+v", url, err)
    28  	}
    29  	if response.StatusCode != 200 {
    30  		return fmt.Errorf("received status code %d from url %s: %s\n", response.StatusCode, url, response.Status)
    31  	}
    32  	defer response.Body.Close()
    33  
    34  	_, err = io.Copy(output, response.Body)
    35  	if err != nil {
    36  		return fmt.Errorf("failed to save response to file, %+v", err)
    37  	}
    38  	return nil
    39  }