• <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| 一级做a爰片久久毛片看看| 青青草原综合久久大伊人导航 | 久久97精品久久久久久久不卡| 日韩久久久久久中文人妻 | 精品综合久久久久久888蜜芽| 久久精品国产免费| 久久人妻无码中文字幕| 久久99热只有频精品8| 久久国产成人精品国产成人亚洲| 欧美久久久久久| 亚洲伊人久久大香线蕉苏妲己| 久久久久九九精品影院| 精品熟女少妇av免费久久| 深夜久久AAAAA级毛片免费看| 国产情侣久久久久aⅴ免费| 青青草原综合久久大伊人导航| 97久久精品人妻人人搡人人玩| 日日狠狠久久偷偷色综合96蜜桃| 久久精品夜夜夜夜夜久久| 久久亚洲精品国产亚洲老地址| 久久久国产精品福利免费| 色综合久久无码中文字幕| 色欲综合久久躁天天躁| 99久久国产综合精品麻豆| 亚洲国产精品无码久久久蜜芽 | 伊人色综合久久| 欧美熟妇另类久久久久久不卡| 亚洲?V乱码久久精品蜜桃| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久久久99精品成人片欧美| 亚洲国产日韩欧美综合久久| 久久精品国产色蜜蜜麻豆| 久久国产成人| 亚洲乱码日产精品a级毛片久久| 久久夜色tv网站| 91精品久久久久久无码| 国产农村妇女毛片精品久久| 国产成人精品久久亚洲高清不卡 | 成人免费网站久久久| 91麻精品国产91久久久久|