• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            浪跡天涯

            唯有努力...
            努力....再努力...

            libcurl使用心得

            Libcurl為一個免費開源的,客戶端url傳輸庫,支持FTPFTPSTFTPHTTPHTTPSGOPHERTELNETDICTFILELDAP,跨平臺,支持WindowsUnixLinux等,線程安全,支持Ipv6。并且易于使用。

            http://curl.haxx.se/libcurl/

            http://curl.haxx.se/libcurl/ 下載一個穩定的版本,注意選擇OS
            在使用之前請大家多閱讀libcurl的文檔:因為如果要實際運用到項目中,最好對libcurl有具體的了解,具體在
            http://curl.haxx.se/libcurl/c/
            curl_easy_setopt()
            curl_easy_perform()
            curl_easy_getinfo()
            這三個函數的使用上,需要多去鉆研,多看Samples,你才能靈活使用libcurl。
            感謝這篇文章:
            http://blog.163.com/xu_chao2000/blog/static/27770610200801303252802/
            給了我許多啟發,再次感謝!

            給出我的一個簡單的代碼例子:
            說明:
            1.關鍵在curl_easy_setopt函數設置option,可以設置ftp,http,get,post等許多選項,請根據具體使用情況設置。

            2.對取回來的數據需要進行判斷,比如http下載文件,如果文件不存在,需要進行處理。因為writer是可以將buf填充404 not found等網頁內容的,不能將這個內容當成文件內容,所以需要判斷http web返回來的code,進行判斷。

            3.我有個問題,就是想得到服務器上filename的具體名稱,verbose調試已經返回了,但是我在getinfo的時候,試過好多選項,但未找到這個存放真實服務器文件名的選項,如果有知道的麻煩告訴我,謝謝了!

            #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 浪跡天涯 閱讀(79499) 評論(18)  編輯 收藏 引用 所屬分類: Lib

            評論

            # re: libcurl使用心得 2008-06-28 15:42 LOGOS

            看起來能用來做蜘蛛  回復  更多評論   

            # re: libcurl使用心得 2008-06-28 16:00 浪跡天涯

            有用這個寫爬蟲的  回復  更多評論   

            # re: libcurl使用心得 2008-07-01 12:48 企業即時通訊

            太厲害了。哈哈。  回復  更多評論   

            # re: libcurl使用心得 2009-09-04 23:07 紫楓閑人

            支持樓主,感謝分享,幫了大忙了。  回復  更多評論   

            # re: libcurl使用心得 2009-09-09 18:55 druselyy

            多線程的效果怎么樣  回復  更多評論   

            # re: libcurl使用心得 2010-08-02 12:10 ShereeHamilton22

            I think that to get the <a href="http://bestfinance-blog.com/topics/personal-loans">personal loans</a> from creditors you must have a good reason. Nevertheless, one time I have got a student loan, because I wanted to buy a building.   回復  更多評論   

            # re: libcurl使用心得 2010-08-22 13:49 able

            樓主的代碼高亮工具我一直沒找到
            不知道樓主方便傳一份不 謝過
            mail: 645989637@qq.com  回復  更多評論   

            # re: libcurl使用心得 2011-03-23 09:45 aaa

            樓主你確信你的可用么,代碼很有問題啊。。。。  回復  更多評論   

            # re: libcurl使用心得[未登錄] 2012-02-03 17:41 rock

            經檢查運行測試, 無法得到結果,顯示錯誤:
            Failed to get ="http://www.baidu.com/img/baidu.gif" []

              回復  更多評論   

            # re: libcurl使用心得[未登錄] 2012-02-03 18:11 rock

            運行正確,是我錯了,不好意思!  回復  更多評論   

            # re: libcurl使用心得 2012-04-04 23:03 小寧

            樓主CURL代碼不能用于斷點續傳
            樓主如果想得到服務器上的文件名可以在響應頭中提取
            希望能和使用LIBCURL的同學一起交流下
            QQ群49184341  回復  更多評論   

            # re: libcurl使用心得 2012-05-10 19:42 北漂一時

            @druselyy多線程效果并沒有multi handle效果好。原因是多線程之間還存在線程的切換,而multi handle是批處理,接收數據后一次性全部寫入,不用像多線程一樣在多個文件之家來回移動磁頭——其實這個是比較耗時的。
              回復  更多評論   

            # re: libcurl使用心得 2012-05-23 16:02

            在多線程中調用easy handle, POST數據時,有時根本發不出數據是怎么回事?總是有丟數據包的現象發生,請問各位高手怎么解決?  回復  更多評論   

            # re: libcurl使用心得 2012-11-15 10:30 P2P下載

            謝謝分享  回復  更多評論   

            # re: libcurl使用心得[未登錄] 2013-04-03 21:46 劉偉

            如果網頁中有中文呢?我這邊調試的是亂碼,該如何處理呢?  回復  更多評論   

            # re: libcurl使用心得[未登錄] 2013-12-06 15:18 曾是土木人

            不錯,對我使用libcurl挺有幫助的,感謝博主的分享精神!  回復  更多評論   

            # re: libcurl使用心得[未登錄] 2013-12-11 19:07 lin

            謝謝博主,參考你的例程成功下載到了文件。萬分感謝博主的分享精神。  回復  更多評論   

            # re: libcurl使用心得 2014-10-24 13:51 da

            http://www.seanyxie.com/libcurl%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/  回復  更多評論   

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            常用鏈接

            留言簿(22)

            隨筆分類(30)

            隨筆檔案(29)

            文章分類

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久国产成人精品麻豆| 久久午夜无码鲁丝片秋霞| 久久国产精品99久久久久久老狼 | 69久久精品无码一区二区| 久久久久国产精品熟女影院| 久久精品人人做人人爽97 | 久久精品无码专区免费| 久久久噜噜噜久久中文字幕色伊伊 | 精品国产乱码久久久久软件| 99国产精品久久| 婷婷久久综合九色综合绿巨人| 亚洲国产精品无码久久一线 | 无码乱码观看精品久久| 久久久久高潮综合影院| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 日韩欧美亚洲综合久久影院Ds| 久久久婷婷五月亚洲97号色| 久久精品国产精品亚洲下载| 久久久精品2019免费观看| 欧美精品国产综合久久| 狠狠色综合网站久久久久久久| 久久香蕉超碰97国产精品| 欧美激情精品久久久久久久| 久久99国产精品久久99| 久久久久久国产精品免费无码| 久久国产亚洲精品| 手机看片久久高清国产日韩| 精品国产青草久久久久福利 | 97久久婷婷五月综合色d啪蜜芽| 久久综合五月丁香久久激情| 情人伊人久久综合亚洲| 91精品国产色综合久久| 91精品国产高清91久久久久久| 午夜天堂av天堂久久久| 亚洲日本va中文字幕久久| 亚洲va中文字幕无码久久不卡| 超级97碰碰碰碰久久久久最新| 久久久久久久91精品免费观看| 中文成人无码精品久久久不卡| 伊人色综合久久天天人守人婷| 99精品久久久久久久婷婷|