• <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
            亚洲av成人无码久久精品| 久久精品人人做人人爽电影蜜月| 久久精品国产精品国产精品污| 91精品国产色综合久久| 成人国内精品久久久久影院VR| 久久亚洲高清综合| 伊人久久大香线蕉综合Av | 亚洲精品无码专区久久久| 久久久久久久久无码精品亚洲日韩 | 精品久久久久久国产牛牛app | 久久久久99精品成人片欧美| 2021精品国产综合久久| 国产午夜精品久久久久九九电影| 久久久久99这里有精品10 | 久久久久一级精品亚洲国产成人综合AV区| 久久高清一级毛片| 久久丫精品国产亚洲av| 免费一级做a爰片久久毛片潮 | 久久婷婷五月综合色99啪ak| 色婷婷综合久久久中文字幕| 久久人人爽人爽人人爽av| 一本色道久久HEZYO无码| 久久国产精品无码网站| 91精品国产综合久久久久久| 久久精品国产99国产精品亚洲| 久久久久亚洲AV无码专区桃色| 久久精品国产亚洲欧美| 久久精品a亚洲国产v高清不卡| 精品久久久久久久国产潘金莲| 国产午夜精品理论片久久 | 久久久久亚洲AV无码观看| 精品久久久久久无码人妻蜜桃| 91精品国产高清久久久久久io| 日韩AV无码久久一区二区| 久久久久久久久久久精品尤物| 午夜精品久久久内射近拍高清| 久久精品亚洲福利| 久久久久亚洲av成人无码电影 | 亚洲AV无码久久寂寞少妇| 亚洲欧美一级久久精品| 亚洲国产精品一区二区三区久久|