久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

libcurl使用心得

 dwlinux_gs 2015-06-23

libcurl使用心得

Libcurl為一個(gè)免費(fèi)開(kāi)源的,,客戶(hù)端url傳輸庫(kù),,支持FTP,F(xiàn)TPS,,TFTP,,HTTP,HTTPS,,GOPHER,,TELNET,DICT,,F(xiàn)ILE和LDAP,,跨平臺(tái),支持Windows,,Unix,,Linux等,線程安全,,支持Ipv6,。并且易于使用。

http://curl./libcurl/

從http://curl./libcurl/ 下載一個(gè)穩(wěn)定的版本,,注意選擇OS,。
在使用之前請(qǐng)大家多閱讀libcurl的文檔:因?yàn)槿绻獙?shí)際運(yùn)用到項(xiàng)目中,最好對(duì)libcurl有具體的了解,,具體在
http://curl./libcurl/c/
curl_easy_setopt()
curl_easy_perform()
curl_easy_getinfo()
這三個(gè)函數(shù)的使用上,,需要多去鉆研,,多看Samples,,你才能靈活使用libcurl。
感謝這篇文章:
http://blog.163.com/xu_chao2000/blog/static/27770610200801303252802/
給了我許多啟發(fā),,再次感謝!

給出我的一個(gè)簡(jiǎn)單的代碼例子:
說(shuō)明:
1.關(guān)鍵在curl_easy_setopt函數(shù)設(shè)置option,可以設(shè)置ftp,http,get,post等許多選項(xiàng),,請(qǐng)根據(jù)具體使用情況設(shè)置。

2.對(duì)取回來(lái)的數(shù)據(jù)需要進(jìn)行判斷,,比如http下載文件,,如果文件不存在,需要進(jìn)行處理,。因?yàn)閣riter是可以將buf填充404 not found等網(wǎng)頁(yè)內(nèi)容的,,不能將這個(gè)內(nèi)容當(dāng)成文件內(nèi)容,所以需要判斷http web返回來(lái)的code,,進(jìn)行判斷。

3.我有個(gè)問(wèn)題,,就是想得到服務(wù)器上filename的具體名稱(chēng),,verbose調(diào)試已經(jīng)返回了,,但是我在getinfo的時(shí)候,,試過(guò)好多選項(xiàng),,但未找到這個(gè)存放真實(shí)服務(wù)器文件名的選項(xiàng),,如果有知道的麻煩告訴我,,謝謝了!

#include "curl/curl.h"
#pragma comment(lib, "libcurl.lib")

long writer(void *data, int size, int nmemb, string &content);
bool  CurlInit(CURL *&curl, const char* url,string &content);
bool  GetURLDataBycurl(const char* URL, string &content);

void main()
{
    char *url ="http://www.baidu.com/img/baidu.gif";
    string content;
    if ( GetURLDataBycurl(url,content))
    {
        printf("%s\n",content);

    }
    getchar();
}

bool CurlInit(CURL *&curl, const char* url,string &content)
{
    CURLcode code;
    string error;
    curl = curl_easy_init();
    if (curl == NULL)
    {
        printf( "Failed to create CURL connection\n");
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
    if (code != CURLE_OK)
    {
        printf( "Failed to set error buffer [%d]\n", code );
        return false;
    }
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    code = curl_easy_setopt(curl, CURLOPT_URL, url);
    if (code != CURLE_OK)
    {
        printf("Failed to set URL [%s]\n", error);
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    if (code != CURLE_OK)
    {
        printf( "Failed to set redirect option [%s]\n", error );
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
    if (code != CURLE_OK)
    {
        printf( "Failed to set writer [%s]\n", error);
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
    if (code != CURLE_OK)
    {
        printf( "Failed to set write data [%s]\n", error );
        return false;
    }
    return true;
}

long writer(void *data, int size, int nmemb, string &content)
{
    long sizes = size * nmemb;
    string temp(data,sizes);
    content += temp; 
    return sizes;
}

bool GetURLDataBycurl(const char* URL,  string &content)
{
    CURL *curl = NULL;
    CURLcode code;
    string error;

    code = curl_global_init(CURL_GLOBAL_DEFAULT);
    if (code != CURLE_OK)
    {
        printf( "Failed to global init default [%d]\n", code );
        return false;
    } 
    
    if ( !CurlInit(curl,URL,content) )
    {
        printf( "Failed to global init default [%d]\n" );
        return PM_FALSE;
    }
    code = curl_easy_perform(curl);
    if (code != CURLE_OK)
    {
        printf( "Failed to get '%s' [%s]\n", URL, error);
        return false;
    }
    long retcode = 0;
    code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE , &retcode); 
    if ( (code == CURLE_OK) && retcode == 200 )
    {
        double length = 0;
        code = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD , &length); 
        printf("%d",retcode);
        FILE * file = fopen("1.gif","wb");
        fseek(file,0,SEEK_SET);
        fwrite(content.c_str(),1,length,file);
        fclose(file);

        //struct curl_slist *list;
        
//code = curl_easy_getinfo(curl,CURLINFO_COOKIELIST,&list);
        
//curl_slist_free_all (list);

        return true;
    }
    else
    {
    //    debug1( "%s \n ",getStatusCode(retcode));
        return false;
    }
    curl_easy_cleanup(curl);
    return false;
}

posted on 2008-06-28 14:50 浪跡天涯 閱讀(64097) 評(píng)論(18)  編輯 收藏 引用 所屬分類(lèi): Lib

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約