2012-08-12 74 views
1

我創建了一個程序,使用curl從INTERNET下載字幕
如何知道我下載的文件的擴展名(.zip或.rar)?確定使用捲曲下載文件時的擴展名?

這裏是我的代碼(它的功能的一部分)

FILE* download=fopen("download.zip","wb");//i assume it's a zip 
curl = curl_easy_init(); 
curl_easy_setopt(curl, CURLOPT_POST,1); 
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,post_data.c_str()); 
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); 
curl_easy_setopt(curl, CURLOPT_URL,url.c_str()); 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write2file); 
curl_easy_setopt(curl, CURLOPT_WRITEDATA, download); 
res = curl_easy_perform(curl); 
if(res != CURLE_OK) 
    std::cout<<"Download Failed "<<std::endl; 
curl_easy_cleanup(curl); 
fclose(download); 
+2

文件擴展名是服務器說的。不是你可以輕鬆控制的東西。相反,你應該檢查結果的MIME類型。 – 2012-08-12 13:24:08

+0

我已經試過,通過獲取標題然後解析它,但到那時該文件將被寫入 – andrewmag 2012-08-12 13:29:12

回答

2

可以使用curl_easy_getinfo()功能,它具有內容類型信息:

CURLINFO_CONTENT_TYPE

通行證一個指向char指針的指針,用於接收下載對象的內容類型。這是從Content-Type: 字段中讀取的值。如果您獲得NULL,則表示服務器未發送有效的 Content-Type標頭,或者使用的協議不支持此標頭。

使用信息,您可以通過在磁盤上重命名下載文件來給出正確的擴展名。

+0

我也試過,也嘗試解析標題我的自我,但那時我已經寫了文件,假設它是一個zip – andrewmag 2012-08-12 13:30:47

+1

不是Curl用戶,但不能使用'CURLOPT_WRITEDATA'和/或'CURLOPT_WRITEFUNCTION'運行這個函數,這會給你沒有寫文件的信息。或者您可以在下載後重命名磁盤上的文件。 – CharlesB 2012-08-12 13:33:45