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 Drive에서 zip 파일을 다운로드하는 대신 "file.zip"이라는 빈 파일만 생성합니다.
문제 해결
추가 조사 결과, Google Drive가 초기 다운로드 URL을 경로에 별표 문자()가 있는 두 번째 URL로 리디렉션하는 것으로 나타났습니다. 불행하게도 Go HTTP 클라이언트는 별표를 로 해결하는 대신 "*"로 인코딩하여 Google Drive에서 "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!