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

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            libcurl應用:如何把下載內容寫入內存

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

            #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 肥仔 閱讀(3471) 評論(-2)  編輯 收藏 引用 所屬分類: 網絡編程

            評論

            # re: libcurl應用:如何把下載內容寫入內存  回復  更多評論   

            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應用:如何把下載內容寫入內存  回復  更多評論   

            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應用:如何把下載內容寫入內存  回復  更多評論   

            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久久做夜夜爱天天做精品| 97久久精品无码一区二区天美| 中文字幕久久久久人妻| 亚洲av伊人久久综合密臀性色| 精品一区二区久久| 亚洲国产成人精品久久久国产成人一区二区三区综 | 无码任你躁久久久久久久| 久久人人爽人人爽人人av东京热 | 91久久精品电影| 久久久久av无码免费网| 久久久国产精品网站| 亚洲级αV无码毛片久久精品 | 久久久这里有精品| 精品免费久久久久久久| 中文字幕亚洲综合久久菠萝蜜| AV无码久久久久不卡蜜桃| 天天综合久久一二三区| 99久久精品无码一区二区毛片| 久久久久亚洲av无码专区导航 | 久久精品国产亚洲一区二区| 久久久久这里只有精品| 93精91精品国产综合久久香蕉| 久久精品青青草原伊人| 午夜精品久久久久久| 久久精品中文字幕一区| 成人a毛片久久免费播放| 2022年国产精品久久久久| 亚洲愉拍99热成人精品热久久| 婷婷久久综合九色综合九七| 国内精品免费久久影院| 亚洲精品高清国产一久久| 久久久青草久久久青草| 久久精品免费一区二区三区| 国产精品久久久久jk制服| 久久久久人妻一区二区三区vr| 一本色综合网久久| 欧美大香线蕉线伊人久久| 久久久久亚洲av无码专区| 99久久超碰中文字幕伊人| 2021精品国产综合久久|