검 은 창 아래 진도 표시 줄 이 있 는 http 다운로드
package main
import (
"flag"
"fmt"
"io"
"log"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/cheggaaa/pb"
)
var (
url = flag.String("url", "", "The download file URL.")
)
func Usage() {
fmt.Printf("Usage of %s:
-url=\"http://www.xxx.com/file.exe\": The download file URL.
", os.Args[0])
os.Exit(1)
}
func main() {
flag.Parse()
if os.Args == nil || *url == "" {
Usage()
}
// /
urlMap := strings.Split(*url, "/")
fileName := urlMap[len(urlMap)-1]
// ? = fileName
if strings.Contains(fileName, "=") {
splitName := strings.Split(fileName, "=")
fileName = splitName[len(splitName)-1]
}
resp, err := http.Get(*url)
if err != nil {
log.Fatal(err)
}
// get url , StatusOK = 200
if resp.StatusCode == http.StatusOK {
log.Printf("[INFO] : [%s]", fileName)
fmt.Print("
")
downFile, err := os.Create(fileName)
if err != nil {
log.Fatal(err)
}
// .
defer downFile.Close()
//
i, _ := strconv.Atoi(resp.Header.Get("Content-Length"))
sourceSiz := int64(i)
source := resp.Body
//
bar := pb.New(int(sourceSiz)).SetUnits(pb.U_BYTES).SetRefreshRate(time.Millisecond * 10)
//
bar.ShowSpeed = true
//
bar.ShowTimeLeft = true
//
bar.ShowFinalTime = true
bar.SetMaxWidth(80)
bar.Start()
writer := io.MultiWriter(downFile, bar)
io.Copy(writer, source)
bar.Finish()
fmt.Print("
")
log.Printf("[INFO] [%s] .", fileName)
} else {
fmt.Print("
")
log.Printf("[ERROR] [%s] ,%s.", fileName, resp.Status)
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
웹에서 자동으로 다운로드할 배치 만들기스크래핑의 공부를 하고 있으면, 원래 URL로부터 직접 다운로드할 수 있는 파일은 커멘드로 간단하게 다운로드할 수 있지 않다고 생각했으므로 자신용 메모도 겸해. 다운로드한 파일의 해동에는 커맨드 라인(커맨드 프롬프트...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.