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

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            libcurl應(yīng)用:如何把下載內(nèi)容寫入內(nèi)存

            libcurl的文檔中有getinmemory.c這個(gè)例子,把下載的網(wǎng)頁寫入自己定義的一個(gè)memorystruct中,看了這個(gè)例子的做法,它需要自己照顧內(nèi)存的開辟,特別是需要在curl_easy_perform的調(diào)用函數(shù)中釋放已開辟的內(nèi)存,很不利于函數(shù)的封裝,而且應(yīng)用于multihandle的時(shí)候,運(yùn)行時(shí)會(huì)出莫名其妙的assert錯(cuò)誤。因此改寫了一下,將下載的內(nèi)容放入stlstring中,這樣根本不需要自己照顧內(nèi)存的開辟和釋放。源代碼如下:

            #include <string>
            #include "curl.h"

            using namespace std;
            static char errorBuffer[CURL_ERROR_SIZE];
            static int writer(char *, size_t, size_t, string *);
            static bool init(CURL *&, char *,string *);

            int main()
            {
                CURL *conn = NULL;
                CURLcode code;
            string buffer;
             
                curl_global_init(CURL_GLOBAL_DEFAULT);
                char* url=" if (!init(conn,url,&buffer ))
                {
                    fprintf(stderr, "Connection initializion failed\n");
                    exit(EXIT_FAILURE);
                }
                code = curl_easy_perform(conn);
              
                if (code != CURLE_OK)
                {
                    fprintf(stderr, "Failed to get '%s' [%s]\n", url, errorBuffer);
                    exit(EXIT_FAILURE);
                }
            curl_easy_cleanup(conn);
            printf("%s\n",buffer.c_str());
                return 0;
               
            }

            static bool init(CURL *&conn, char *url,string *p_buffer)
            {
                CURLcode code;
                conn = curl_easy_init();
                if (conn == NULL)
                {
                    fprintf(stderr, "Failed to create CURL connection\n");
                    exit(EXIT_FAILURE);
                }
                code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, errorBuffer);
                if (code != CURLE_OK)
                {
                    fprintf(stderr, "Failed to set error buffer [%d]\n", code);
                    return false;
                }
                code = curl_easy_setopt(conn, CURLOPT_URL, url);
                if (code != CURLE_OK)
                {
                    fprintf(stderr, "Failed to set URL [%s]\n", errorBuffer);
                    return false;
                }
                code = curl_easy_setopt(conn, CURLOPT_FOLLOWLOCATION, 1);
                if (code != CURLE_OK)
                {
                    fprintf(stderr, "Failed to set redirect option [%s]\n", errorBuffer);
                    return false;
                }
                code = curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, writer);
                if (code != CURLE_OK)
                {
                    fprintf(stderr, "Failed to set writer [%s]\n", errorBuffer);
                    return false;
                }
                code = curl_easy_setopt(conn, CURLOPT_WRITEDATA, p_buffer);
                if (code != CURLE_OK)
                {
                    fprintf(stderr, "Failed to set write data [%s]\n", errorBuffer);
                    return false;
                }
                return true;
            }

            static int writer(char *data, size_t size, size_t nmemb, string *writerData)
            {
                unsigned long sizes = size * nmemb;
                if (writerData == NULL) return 0;
                writerData->append(data, sizes);
                return sizes;
            }

             

            posted on 2009-03-13 12:07 肥仔 閱讀(3482) 評(píng)論(-2)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程

            評(píng)論

            # re: libcurl應(yīng)用:如何把下載內(nèi)容寫入內(nèi)存  回復(fù)  更多評(píng)論   

            I received my first <a href="http://bestfinance-blog.com/topics/mortgage-loans">mortgage loans</a> when I was 25 and it aided me very much. However, I require the credit loan also.
            2010-11-26 20:54 | BurgessDEBORAH

            # re: libcurl應(yīng)用:如何把下載內(nèi)容寫入內(nèi)存  回復(fù)  更多評(píng)論   

            To order thesis statement supposes to be simple. Nevertheless, good students must remember that only a trustworthy dissertation writing service can provide good quality.
            2011-06-23 06:27 | dissertation writing service

            # re: libcurl應(yīng)用:如何把下載內(nèi)容寫入內(nèi)存  回復(fù)  更多評(píng)論   

            Writing companies with many years of experience in producing of different sorts of resume papers will be good advisers for the people who need to order resume of the high quality.
            2013-08-19 11:42 | over here
            久久综合九色综合久99| 亚洲国产精品无码久久一区二区| 久久久精品国产sm调教网站| 久久久久久人妻无码| 99国内精品久久久久久久| 亚洲精品美女久久久久99小说| 亚洲乱码精品久久久久.. | 成人国内精品久久久久影院VR| 国产精品va久久久久久久| 久久伊人五月天论坛| 国内精品久久久久久99蜜桃| 久久99国产精品成人欧美| 久久AV高潮AV无码AV| 国内精品久久国产大陆| 综合久久精品色| 91久久精品无码一区二区毛片| 午夜精品久久久久久影视777| 国产午夜福利精品久久2021| 尹人香蕉久久99天天拍| 日本精品久久久中文字幕| 无码AV波多野结衣久久| 亚洲?V乱码久久精品蜜桃| 狠狠色丁香婷综合久久| 色欲av伊人久久大香线蕉影院| 国产精品99久久不卡| 99久久综合狠狠综合久久止| 日韩人妻无码一区二区三区久久| 亚洲国产成人乱码精品女人久久久不卡| 91精品国产乱码久久久久久| 囯产精品久久久久久久久蜜桃 | 久久国产劲爆AV内射—百度| 99久久精品国产一区二区三区| 久久久久久亚洲AV无码专区| 亚洲熟妇无码另类久久久| 国产精品久久久久久五月尺| 午夜福利91久久福利| 午夜精品久久久久久| 亚洲国产视频久久| 久久婷婷国产剧情内射白浆| 亚洲国产天堂久久久久久| 久久精品中文字幕一区|