• <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)

            文章分類

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品久久久久久久久| 久久久中文字幕日本| 亚洲中文久久精品无码ww16| 久久久国产视频| 亚洲午夜久久久影院| 亚洲国产成人久久精品影视| 一本综合久久国产二区| 色综合合久久天天综合绕视看| 久久久精品久久久久特色影视| 亚洲乱码中文字幕久久孕妇黑人| 久久伊人精品青青草原高清| 久久热这里只有精品在线观看| 欧美激情精品久久久久| 久久人人青草97香蕉| 精品久久久久久国产| 国产精品99久久久精品无码| 久久成人国产精品一区二区| 精品国产一区二区三区久久久狼| 久久强奷乱码老熟女网站| 久久精品国产亚洲网站| 亚洲αv久久久噜噜噜噜噜| 热久久这里只有精品| 精品久久久久久国产91| 久久天天躁狠狠躁夜夜avapp| 国产精品日韩欧美久久综合| 国产精品一区二区久久| 欧美精品久久久久久久自慰| 狠狠综合久久综合88亚洲| 久久久噜噜噜久久| 国产成人精品久久综合| 欧美亚洲国产精品久久蜜芽| 国内精品人妻无码久久久影院| 77777亚洲午夜久久多喷| 伊人热热久久原色播放www| 国产精品女同一区二区久久| 97精品国产97久久久久久免费| 成人免费网站久久久| 日本福利片国产午夜久久| 欧美久久综合性欧美| 久久久久一本毛久久久| 2021国内久久精品|