Learn how to make the most out of the Dropbox Community here 💙!
Forum Discussion
Makhlouf
6 years agoExplorer | Level 3
Programmatically download a shared file using C++ Curl
Hi,
I developped an aplication in C++ that runs on Windows. I am trying to add a feauture in the program to download a shared file from my dropbox folder. I would like the downloading to go in back...
Greg-DB
Dropbox Staff
6 years agoYou can download a file from a shared link directly without using an access token, like you tried initially. Note that by default however, Dropbox shared links point to an HTML preview page, not the file data itself. You can modify the link to point to the file data though, as described here:
- Makhlouf6 years agoExplorer | Level 3
Thanks for your answer. I read this article and tried it but did not work. Here is my observations:
1- If I leave the shared link as it is, curl will download an html file which when opened in a browser I get the below screen.
2- If I chose to skip sign in, I can not download teh file.
3- If I modified the shared link with dl=1 instead of dl=0, I receive nothing.
4- Windows function URLDownloadToFile() download an html file using the original link also. However, it can not be open in the browser. It seems it has error message but I can not read html to find out the problem.
[IMAGE LINK IS BROKEN AND CANNOT BE DISPLAYED]
I am not quite sure what I am doing wrong. Please advise.
- Greg-DB6 years ago
Dropbox Staff
I'm not sure I follow. Can you share your code and whatever error/output you're getting when you try to download from a shared link with dl=1? Thanks in advance!
- Makhlouf6 years agoExplorer | Level 3
Below is the code I use:
#include "Stdafx.h"
#include "curl.h"
#include "Download.h"
static const char* FileURL[] = {
"https://www.dropbox.com/s/9thz78bwfeykqra/version.dat?dl=0" ,
"https://www.dropbox.com/s/9thz78bwfeykqra/version.dat?dl=1"
} ;static size_t write_data (void *ptr,size_t size,size_t nmemb,void* stream)
{
size_t written = fwrite (ptr,size,nmemb,(FILE * ) stream) ;
return written ;
}int DownloadFile ()
{
static char TargetURL[] = "E:\\Download\\DownloadURL\\Test.dat" ;
static char TargetCURL[] = "E:\\Download\\DownloadCURL\\Test.dat" ;// Download the file using windows function into DownloadURL folder
URLDownloadToFile (nullptr,FileURL[1],TargetURL,0,nullptr) ;// Download the file using curl library into DownloadCURL folder
if (auto curl = curl_easy_init ()) {
auto fp = fopen (TargetCURL,"wb") ;
curl_easy_setopt (curl,CURLOPT_URL,FileURL[1]) ;
curl_easy_setopt (curl,CURLOPT_WRITEFUNCTION,write_data) ;
curl_easy_setopt (curl,CURLOPT_FOLLOWLOCATION,1) ;
curl_easy_setopt (curl,CURLOPT_FAILONERROR,1) ;
curl_easy_setopt (curl,CURLOPT_WRITEDATA,fp) ;
curl_easy_setopt (curl,CURLOPT_HTTPPROXYTUNNEL,1) ;/* Perform the request, res will get the return code */
auto res = curl_easy_perform (curl) ;fclose (fp) ;
curl_easy_cleanup (curl) ;
} /* if (auto curl = curl_easy_init ()) */return true ;
} /* Download */
The original link is FileURL[0] and the modified link is FileURL[1]
The downloaded file with Curl library, and original link, is an html the opens a web page for downloading the file. If I typed the shared link into the address bar in my browser, I get same page.
When I download the modified link, both windows function and Curl library download nothing. Curl function curl_easy_perform () returns : (6) CURL_COULDNT_RESOLVE_HOST.
would you like to inspect the html files I get with original link, Because they may have some information that I can not read.
Thank for your help.
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.5,970 PostsLatest Activity: 4 hours ago
If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!