• <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, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

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

            libcurl的文檔中有getinmemory.c這個例子,把下載的網(wǎng)頁寫入自己定義的一個memorystruct中,看了這個例子的做法,它需要自己照顧內(nèi)存的開辟,特別是需要在curl_easy_perform的調(diào)用函數(shù)中釋放已開辟的內(nèi)存,很不利于函數(shù)的封裝,而且應(yīng)用于multihandle的時候,運行時會出莫名其妙的assert錯誤。因此改寫了一下,將下載的內(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) 評論(-2)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)編程

            評論

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

            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ù)  更多評論   

            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ù)  更多評論   

            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
            97久久超碰国产精品2021| 国内精品久久国产| 91精品国产综合久久精品| 国产色综合久久无码有码| 亚洲国产成人精品无码久久久久久综合 | 国产视频久久| 久久996热精品xxxx| 久久97久久97精品免视看秋霞| 嫩草影院久久国产精品| 国产精品岛国久久久久| 久久综合欧美成人| 国产真实乱对白精彩久久| 国产视频久久| 久久亚洲国产精品成人AV秋霞| 亚洲女久久久噜噜噜熟女| 国内精品九九久久久精品| 成人精品一区二区久久久| 国产精品久久新婚兰兰| 久久精品国产网红主播| 亚洲狠狠综合久久| 久久综合亚洲色HEZYO国产| 狠狠色丁香久久婷婷综合_中| 久久偷看各类wc女厕嘘嘘| 国产精品九九久久免费视频| 一级A毛片免费观看久久精品| 熟妇人妻久久中文字幕| 成人午夜精品久久久久久久小说| 一本久道久久综合狠狠躁AV| 性欧美大战久久久久久久久| 色综合久久久久| 亚洲国产精品无码久久一线 | 一本大道久久东京热无码AV| 久久国产色AV免费看| 亚洲国产精品综合久久网络| 精品久久久噜噜噜久久久| 久久精品国产一区二区电影| 国内精品久久久人妻中文字幕| 少妇久久久久久被弄到高潮| 99久久久精品免费观看国产| 无码8090精品久久一区| 18岁日韩内射颜射午夜久久成人|