• <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)頁(yè)寫入自己定義的一個(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 肥仔 閱讀(3517) 評(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
            国产精品一区二区久久| 日韩AV毛片精品久久久| 久久精品草草草| 精品久久久无码中文字幕天天| 91精品久久久久久无码| 噜噜噜色噜噜噜久久| 精品久久久久久无码中文字幕一区| 久久精品国产99国产电影网 | 2021国内久久精品| 一本色道久久88—综合亚洲精品| 久久久精品国产sm调教网站 | 久久国产精品99精品国产987| 日批日出水久久亚洲精品tv| 精品国产VA久久久久久久冰| 欧美久久天天综合香蕉伊| 国产精品久久久久jk制服| 日日狠狠久久偷偷色综合0| 久久国产精品99久久久久久老狼| 97精品伊人久久大香线蕉| 久久99亚洲综合精品首页| 精品熟女少妇a∨免费久久| 99久久综合国产精品免费| 精品水蜜桃久久久久久久| 2021久久国自产拍精品| 99久久无色码中文字幕人妻| 亚洲精品第一综合99久久| 精品久久久久久久中文字幕 | 99久久久精品免费观看国产| 97久久婷婷五月综合色d啪蜜芽| 久久精品中文字幕有码| 一级做a爰片久久毛片16| 97久久国产亚洲精品超碰热| 久久亚洲精品成人AV| 久久婷婷五月综合97色一本一本 | 亚洲中文字幕久久精品无码喷水 | 久久人人爽人人人人爽AV| 亚洲日韩欧美一区久久久久我 | 香蕉久久久久久狠狠色| 欧美大战日韩91综合一区婷婷久久青草| 久久精品国产99国产精品澳门| 久久91精品久久91综合|