• <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 肥仔 閱讀(3482) 評論(-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精品久久久久久| 亚洲AV无一区二区三区久久| 国产精品国色综合久久| 97久久精品人人做人人爽| 久久夜色精品国产亚洲av| 精品国产乱码久久久久久郑州公司 | 国产精品99久久精品爆乳| 亚洲国产精品无码久久青草| 日韩人妻无码精品久久久不卡 | 狠狠人妻久久久久久综合蜜桃| 久久毛片一区二区| 国产亚洲成人久久| 国产精品对白刺激久久久| 久久久久久精品免费看SSS| 99久久无码一区人妻| 久久婷婷五月综合97色一本一本| 亚洲国产成人精品91久久久| 久久综合久久综合九色| 久久久久99精品成人片试看| 色妞色综合久久夜夜| 国产精品午夜久久| 99久久这里只有精品| 人妻少妇久久中文字幕| 国内精品久久久久影院薰衣草| 久久久久国产一区二区| 久久亚洲国产精品一区二区| 99999久久久久久亚洲| 无码国内精品久久人妻蜜桃| 久久久久波多野结衣高潮| 欧美激情精品久久久久久久| 精品久久人人妻人人做精品| 一级做a爰片久久毛片16| 亚洲嫩草影院久久精品| 久久精品国产亚洲麻豆| 久久国产精品成人免费| 欧美777精品久久久久网| 精品久久久久久无码人妻热| 久久97久久97精品免视看| 久久se精品一区二区影院|