Memuat turun Fail Awam daripada Google Drive di Golang
Dalam artikel ini, kami akan meneroka cara memuat turun fail zip yang dikongsi secara terbuka daripada Google Pandu menggunakan Golang.
Pernyataan Masalah
Pertimbangkan coretan kod berikut yang cuba memuat turun fail zip daripada Google Drive:
<code class="go">package main import ( "fmt" "io" "net/http" "os" ) func main() { url := "https://docs.google.com/uc?export=download&id=0B2Q7X-dUtUBebElySVh1ZS1iaTQ" fileName := "file.zip" fmt.Println("Downloading file...") output, err := os.Create(fileName) defer output.Close() response, err := http.Get(url) if err != nil { fmt.Println("Error while downloading", url, "-", eerrror) return } defer response.Body.Close() n, err := io.Copy(output, response.Body) fmt.Println(n, "bytes downloaded") }</code>
Walau bagaimanapun , kod ini hanya mencipta fail kosong bernama "file.zip" dan bukannya memuat turun fail zip daripada Google Drive.
Menyelesaikan Masalah
Setelah siasatan lanjut, ia didapati bahawa Google Drive mengubah hala URL muat turun awal ke URL kedua dengan aksara asterisk () dalam laluannya. Malangnya, klien HTTP Go mengekodkan asterisk sebagai "*" dan bukannya menyelesaikannya kepada , menghasilkan respons "403 Dilarang" daripada Google Drive.
Penyelesaian
Untuk menyelesaikan isu ini, anda boleh memanipulasi URL secara manual untuk mengalih keluar aksara asterisk dan mengekodnya dengan betul mengikut RFC 3986. Coretan kod yang diubah suai akan kelihatan seperti ini:
<code class="go">package main import ( "fmt" "io" "net/http" "os" "strings" ) func main() { url := "https://docs.google.com/uc?export=download&id=0B2Q7X-dUtUBebElySVh1ZS1iaTQ" fileName := "file.zip" fmt.Println("Downloading file...") // Replace the %2A with the asterisk character url = strings.Replace(url, "%2A", "*", -1) output, err := os.Create(fileName) defer output.Close() response, err := http.Get(url) if err != nil { fmt.Println("Error while downloading", url, "-", err) return } defer response.Body.Close() n, err := io.Copy(output, response.Body) fmt.Println(n, "bytes downloaded") }</code>
Dengan menggantikan secara manual "*" dengan aksara asterisk, kod tersebut berjaya memuat turun fail zip daripada Google Drive.
Atas ialah kandungan terperinci Cara Muat Turun Fail Awam dari Google Drive di Golang: Mengapa Fail Zip Saya Kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!