Golang で Google ドライブからパブリック ファイルをダウンロードする
この記事では、Google からパブリックに共有されている zip ファイルをダウンロードする方法について説明します。 Golang を使用してドライブします。
問題の説明
Google ドライブから zip ファイルをダウンロードしようとする次のコード スニペットを考えてみましょう。
<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>
ただし、このコードは、Google ドライブから zip ファイルをダウンロードするのではなく、「file.zip」という名前の空のファイルを作成するだけです。
問題のトラブルシューティング
さらに調査すると、 Google ドライブが最初のダウンロード URL を、パスにアスタリスク文字 () が含まれる 2 番目の URL にリダイレクトすることが判明しました。残念ながら、Go HTTP クライアントはアスタリスクを に解決せずに "*" としてエンコードし、その結果、Google ドライブから "403 Forbidden" 応答が返されます。
解決策
この問題を解決するには、URL を手動で操作してアスタリスク文字を削除し、RFC 3986 に従って正しくエンコードします。変更されたコード スニペットは次のようになります。
<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>
手動で置き換える「*」にアスタリスク文字を付けると、コードは Google ドライブから zip ファイルを正常にダウンロードします。
以上がGolang で Google ドライブからパブリック ファイルをダウンロードする方法: ZIP ファイルが空なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。