2012-07-25 35 views
0

我試圖下載需要我的應用程序從互聯網上一個文件(安裝的一部分),以便在第一時間應用程序啓動時,需要的文件被下載。現在我將它們放在Google Drive上並公開,然後我將使用libcURL下載它們。問題是,我無法獲取數據。的libcurl和谷歌文件

我使用下面的鏈接:https://docs.google.com/uc?id=documentID&export=download,並用編號來取代documentID。當我嘗試連接到網站時,它不斷給我一小段HTML代碼,基本上說「暫時移動」,並給我一個鏈接到新的URL。當我在我的程序中使用新鏈接時,我什麼也得不到輸出。但是,當我沒有登錄時,這兩個鏈接在我的Web瀏覽器中工作得很好,,甚至。那麼,爲什麼他們不在我的程序中工作?我沒有正確設置SSL選項,還是Google Drive不是爲了這種事情?

這裏是我的代碼:

#include <curl/curl.h> 

int main() 
{ 
    curl_global_init(CURL_GLOBAL_ALL); 

    CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 
    if(curl) { 
     curl_easy_setopt(curl, CURLOPT_URL, "https://docs.google.com/uc?id=documentID&export=download"); 
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); 
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); 
     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 
     curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 
     res = curl_easy_perform(curl); 
    } 
    curl_easy_cleanup(curl); 
    return 0; 
} 

任何幫助,將不勝感激。

回答

2

你需要設置CURLOPT_FOLLOWLOCATION選項告訴捲曲跟隨重定向。

+0

討論我增加了CURLOPT_FOLLOWLOCATION並將其設置爲1L,我敢肯定它進行連接,但現在的程序沒有給予任何輸出。 .. – rcplusplus 2012-07-25 17:57:19

+0

爲了幫助調試你可以設置'CURLOPT_VERBOSE',它會給stderr寫很多調試輸出。 – Giel 2012-07-25 18:01:09

+0

感謝您的提示!現在我知道發生了什麼事。所以CURLOPT_FOLLOWLOCATION完成了它的工作,因爲當第一個鏈接給它一個「302 Moved Temporarily」代碼時,它就進入了新的鏈接。當它執行一個HTTP請求時,它成功使用了HTML代碼200,並獲得了許多似乎是正確的信息。但是由於某種原因它沒有輸出數據......我認爲我的'write_data()'函數是錯誤的... – rcplusplus 2012-07-25 18:07:56

1

我不知道這是否直接幫助,但我一直提出的要求

curl_global_init(CURL_GLOBAL_ALL); 

,我看你不使用。我在線程SSL代碼示例http://curl.haxx.se/libcurl/c/threaded-ssl.html中看到了此處調用。這個`curl_global_init()調用將執行SSL初始化和其他事情。正是在這個環節http://curl.haxx.se/libcurl並在libcurl的教程這裏http://curl.haxx.se/libcurl/c/libcurl-tutorial.html

+0

在main()方法的頂部添加了這個函數,但仍然沒有得到任何輸出。 .. – rcplusplus 2012-07-25 18:01:14