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>
ただし、このコードは「file.zip」という名前の空のファイルを作成するだけです。 Google ドライブから 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 サイトの他の関連記事を参照してください。