• <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)貼],因其丑陋,見(jià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)存的開(kāi)辟,特別是需要在curl_easy_perform的調(diào)用函數(shù)中釋放已開(kāi)辟的內(nèi)存,很不利于函數(shù)的封裝,而且應(yīng)用于multihandle的時(shí)候,運(yùn)行時(shí)會(huì)出莫名其妙的assert錯(cuò)誤。因此改寫了一下,將下載的內(nèi)容放入stlstring中,這樣根本不需要自己照顧內(nèi)存的開(kā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 肥仔 閱讀(3471) 評(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
            91精品国产91热久久久久福利| 久久精品国产久精国产| 国产三级观看久久| 国产成人精品久久二区二区| 国产成人精品久久| 久久久久亚洲av成人网人人软件| 久久笫一福利免费导航| 久久精品无码免费不卡| 久久91精品综合国产首页| 国产精品一区二区久久精品无码| 91精品国产91久久综合| 99久久国语露脸精品国产| 99re这里只有精品热久久| 精品久久人妻av中文字幕| 久久精品欧美日韩精品| 精品精品国产自在久久高清| 狠狠色丁香久久综合五月| 成人国内精品久久久久影院| 女人香蕉久久**毛片精品| 香蕉久久夜色精品国产小说| 国产精品一区二区久久精品无码| 精品无码久久久久久国产| 久久久精品国产Sm最大网站| 一本久久a久久精品综合香蕉| 久久久这里有精品| 亚洲va久久久噜噜噜久久| 99国产欧美精品久久久蜜芽| 99久久国产综合精品成人影院| 精品久久久久久无码人妻热| 天天做夜夜做久久做狠狠| 久久国产劲爆AV内射—百度| 国产精品一区二区久久不卡| 久久99精品国产麻豆婷婷| 久久国产精品无| 精品熟女少妇av免费久久| 国产精品伦理久久久久久| 久久91精品国产91| 久久精品视频免费| 国产精品久久久久久久app| 久久精品国产亚洲精品2020| 久久国产成人精品国产成人亚洲|