A cookie must match the "confirm" url parameter, and it is changed on each call.
Here's a perl script to download these files in an unattended way.
With the url from the antivirus scan warning page (https://drive.google.com/uc?export=download&confirm=s5vl&id=XXX) this code should be enough:
#!/usr/bin/perl
use strict;
my $TEMP='/tmp';my $COMMAND;my $confirm;
sub execute_command();
my $URL=shift;my $FILENAME=shift;
$FILENAME='gdown' if $FILENAME eq '';
execute_command();
if (-s $FILENAME < 100000) { # only if file isn't the download yet
open fFILENAME, '<', $FILENAME;
foreach (<fFILENAME>) {
if (/confirm=([^;&]+)/) {
$confirm=$1; last; } }
close fFILENAME;
$URL=~s/confirm=([^;&]+)/confirm=$confirm/;
execute_command(); }
sub execute_command() {
$COMMAND="wget --no-check-certificate --load-cookie $TEMP/cookie.txt --save-cookie $TEMP/cookie.txt \"$URL\"";
$COMMAND.=" -O \"$FILENAME\"" if $FILENAME ne '';
`$COMMAND`; return 1; }
Answer from circulosmeos on Stack ExchangeVideos
A cookie must match the "confirm" url parameter, and it is changed on each call.
Here's a perl script to download these files in an unattended way.
With the url from the antivirus scan warning page (https://drive.google.com/uc?export=download&confirm=s5vl&id=XXX) this code should be enough:
#!/usr/bin/perl
use strict;
my $TEMP='/tmp';my $COMMAND;my $confirm;
sub execute_command();
my $URL=shift;my $FILENAME=shift;
$FILENAME='gdown' if $FILENAME eq '';
execute_command();
if (-s $FILENAME < 100000) { # only if file isn't the download yet
open fFILENAME, '<', $FILENAME;
foreach (<fFILENAME>) {
if (/confirm=([^;&]+)/) {
$confirm=$1; last; } }
close fFILENAME;
$URL=~s/confirm=([^;&]+)/confirm=$confirm/;
execute_command(); }
sub execute_command() {
$COMMAND="wget --no-check-certificate --load-cookie $TEMP/cookie.txt --save-cookie $TEMP/cookie.txt \"$URL\"";
$COMMAND.=" -O \"$FILENAME\"" if $FILENAME ne '';
`$COMMAND`; return 1; }
After spending many countless hours trying to get a direct download link that bypasses the virus scan I finally figured it out by accident. A URL in the format below along with your Google API key will bypass the virus scan. I could not find this documented anywhere (here is the official doc) so use at your own risk as future updates might break it. https://www.googleapis.com/drive/v3/files/fileid/?key=yourapikey&alt=media
Update: Mars 2025
You can use gdown. Consider also visiting that page for full instructions; this is just a summary and the source repo may have more up-to-date instructions.
Instructions
Install it with the following command:
pip install gdown
After that, you can download any file from Google Drive by running one of these commands:
gdown https://drive.google.com/uc?id=<file_id> # for files
gdown <file_id> # alternative format
gdown --folder https://drive.google.com/drive/folders/<file_id> # for folders
gdown --folder --id <file_id> # this format works for folders too
Example: to download the readme file from this directory
gdown https://drive.google.com/uc?id=0B7EVK8r0v71pOXBhSUdJWU1MYUk
The file_id should look something like 0Bz8a_Dbh9QhbNU3SGlFaDg. You can find this ID by right-clicking on the file of interest, and selecting Get link. As of November 2021, this link will be of the form:
# Files
https://drive.google.com/file/d/<file_id>/view?usp=sharing
# Folders
https://drive.google.com/drive/folders/<file_id>
Caveats
- Only works on open access files. ("Anyone who has a link can View")
- Cannot download more than 50 files into a single folder.
- If you have access to the source file, you can consider using tar/zip to make it a single file to work around this limitation.
I wrote a Python snippet that downloads a file from Google Drive, given a shareable link.
The snipped does not use gdrive, nor the Google Drive API. It uses the requests module.
When downloading large files from Google Drive, a single GET request is not sufficient. A second one is needed, and this one has an extra URL parameter called confirm, whose value should equal the value of a certain cookie.
import requests
def download_file_from_google_drive(id, destination):
def get_confirm_token(response):
for key, value in response.cookies.items():
if key.startswith('download_warning'):
return value
return None
def save_response_content(response, destination):
CHUNK_SIZE = 32768
with open(destination, "wb") as f:
for chunk in response.iter_content(CHUNK_SIZE):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
URL = "https://docs.google.com/uc?export=download"
session = requests.Session()
response = session.get(URL, params = { 'id' : id }, stream = True)
token = get_confirm_token(response)
if token:
params = { 'id' : id, 'confirm' : token }
response = session.get(URL, params = params, stream = True)
save_response_content(response, destination)
if __name__ == "__main__":
import sys
if len(sys.argv) is not 3:
print("Usage: python google_drive.py drive_file_id destination_file_path")
else:
# TAKE ID FROM SHAREABLE LINK
file_id = sys.argv[1]
# DESTINATION FILE ON YOUR DISK
destination = sys.argv[2]
download_file_from_google_drive(file_id, destination)
Hello!
I have Google Drive and need to get the public URL open to anyone, direct download. Something like this: https://drive.google.com/uc?export=download&id=17PLZNiFN3Nabh2MYB29cN_XKA7VtbbGt
I can get it by right click, then share, then configure to open for everyone, and then modifying the URL to the direct download this takes Loya of time for many files.
Any app that can get me this easily?
Thanks!