日志文章

2007年06月12日 09:09:16

在Windows下使用libcurl、curlpp

1. 下载libcurl、curlpp源代码
例如下载
 
2. 下载zlib
例如下载
 
3. 编译OpenSSL
 
4. 编译libcurl,以VS2005为例

将curl-7.16.2.tar.bz2解压到某目录,例如C:\curl,进入C:\curl\lib目录

将zlib123-dll.zip解压到某目录,例如C:\zlib

设Openssl的目录为C:\openssl

 

进入Visual Studio 2005命令提示,进入C:\curl\lib

 

编译Debug版本。

set CFG=debug-dll-ssl-dll-zlib-dll

set OPENSSL_PATH=C:/openssl

set ZLIB_PATH=C:/zlib/include

nmake -f Makefile.vc8

 

其输出:libcurld_imp.lib, libcurld.dll

 

编译Release版本。

set CFG=release-dll-ssl-dll-zlib-dll

set OPENSSL_PATH=C:/openssl

set ZLIB_PATH=C:/zlib/include

nmake -f Makefile.vc8

其输出:libcurl_imp.lib, libcurl.dll

如果需要编译其他版本,可查看设定相应的CFG 参数即可。

 

 

5.编译curlpp

将curlpp-0.7.0.tar.gz解压到某目录,例如C:\curlpp\curlpp

set CFG=release

nmake -f Makefile.msvc

如果需要编译其他版本,可查看设定相应的CFG 参数即可。

 

需要注意的是可能需要对原文件进行一定的修改。

一种方案是:

修改Makefile.msvc中LIBCURL_PATH

修改dllfct.h关于CURLPPAPI的宏定义

#define CURLPPAPI 

 

6.测试

该程序是备份CUBlog程序的C++版,需要boost库

 

#include <iostream>
#include <string>
#include <queue>

#include <boost/lexical_cast.hpp>
#include <boost/regex.hpp>
#include <boost/tuple/tuple.hpp>

#include <curlpp/cURLpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>
#include <curlpp/Exception.hpp>

#pragma comment(lib,"libcurlpp.lib")
#pragma comment(lib,"libcurl_imp.lib")

using namespace std;

#define MAX_FILE_LENGTH 20000

class WriterMemoryClass
{
    public:
    
// Helper Class for reading result from remote host
    WriterMemoryClass(){
        this->m_pBuffer = NULL;
        this->m_pBuffer = (char*) malloc(MAX_FILE_LENGTH * sizeof(char));
        this->m_Size = 0;
    }
    ~WriterMemoryClass() {
        if (this->m_pBuffer)
            free(this->m_pBuffer);
    }
    void* Realloc(void* ptr, size_t size) {
        if(ptr)
            return realloc(ptr, size);
        else
            return malloc(size);
    }
    
// Callback must be declared static, otherwise it won't link...
    size_t WriteMemoryCallback(char* ptr, size_t size, size_t nmemb) {
        
// Calculate the real size of the incoming buffer
        size_t realsize = size * nmemb;
        
// (Re)Allocate memory for the buffer
        m_pBuffer = (char*) Realloc(m_pBuffer, m_Size + realsize);
        
// Test if Buffer is initialized correctly & copy memory
        if (m_pBuffer == NULL) {
            realsize = 0;
        }
        
        memcpy(&(m_pBuffer[m_Size]), ptr, realsize);
        m_Size += realsize;
        
// return the real size of the buffer...
        return realsize;
    }
    
    
// Public member vars
    char* m_pBuffer;
    size_t m_Size;
};

int main(int argc,char * argv[])
{
    string list_base="http://blog.chinaunix.net/u/8780/article.php?frmid=0&page=";
    string art_base="http://blog.chinaunix.net/u/8780/showart.php?id=";
    boost::regex rexp("<a href=\"showart_([0-9]{6}).*?><font.*?><b>(.*?)</b></font></a>");
    boost::regex fnp("[/\\:*?\"<>]");
    typedef boost::tuple<string,string> element;
    queue<element> q;
    bool save=true;
    if(argc==1)
        save=false;
        
    try {
        cURLpp::Cleanup cleaner;
        cURLpp::Easy request;
        cURLpp::Easy handler;
       int i=0;
        bool cond=true;
        while(cond) {
            i++;
            cond=false;
            string list_url=list_base+boost::lexical_cast<string>(i);
            cerr<<list_url<<endl;
            
// Get the content
            WriterMemoryClass mWriterChunk;
            
// Set the writer callback to enable cURL to write result in a memory area
            cURLpp::Types::WriteFunctionFunctor functor(&mWriterChunk,&WriterMemoryClass::WriteMemoryCallback);
            cURLpp::Options::WriteFunction *test = new cURLpp::Options::WriteFunction(functor);
            request.setOpt(test);
            
// Setting the URL to retrive.
            request.setOpt(new cURLpp::Options::Url(list_url));
            
//request.setOpt(new cURLpp::Options::Verbose(true));
            request.perform();
            
//cout<<mWriterChunk.m_pBuffer<<endl;
            
// Get the id and article name pairs
            string s=string(mWriterChunk.m_pBuffer);
            string::const_iterator it=s.begin();
            string::const_iterator end=s.end();
            boost::smatch m;
            while(boost::regex_search(it,end,m,rexp)) {
                cond=true;
                
//cout<<m[1].str()<<" "<<m[2].str()<<endl;
                q.push(element(m[1].str(),m[2].str()));
                it=m[0].second;
            }
        }
        
// Backup
        cerr<<"There are "<<i-1<<" Pages"<<endl;
        cout<<"<html>\n<head>"<<endl;
        cout<<"<title>Linxh's CUBlog List</title>"<<endl;
        cout<<"</head>\n<body>"<<endl;
        cout<<"<font face=\"Arial, Helvetica\" size=4>"<<endl;
        
        while(!q.empty()) {
            element e=q.front();
            q.pop();
            string art_url=art_base+e.get<0>();
            string fname=boost::tuples::get<1>(e);
            cout<<"<a target=\"_blank\" href=\""<<art_url<<"\">"<<fname<<"</a><br>"<<endl;
            if(save) {
                fname=boost::regex_replace(fname,fnp,"_");
                fname+=".html";
                cerr<<"Saving "<<art_url<<" as file "<<fname.c_str()<<endl;
                FILE * fp=fopen(fname.c_str(),"wb");
                if(fp==NULL) {
                    cerr<<"Could not open file "<<fname.c_str()<<endl;
                    cerr<<"Skipping"<<endl;
                    continue;
                }
                cURLpp::OptionTrait< void *, CURLOPT_WRITEDATA > myData(fp);
                handler.setOpt(myData);
                
// Setting the URL to retrive.


                handler.setOpt(new cURLpp::Options::Url(art_url));
                
//request.setOpt(new cURLpp::Options::Verbose(true));
                handler.perform();
            }
        }
        cout<<"</font>"<<endl;
        cout<<"</body>\n</html>"<<endl;
        
    }
    catch ( cURLpp::LogicError & e ) {
        std::cout << e.what() << std::endl;
    }
    catch ( cURLpp::RuntimeError & e ) {
        std::cout << e.what() << std::endl;
    }

    return 0;
}

Tags: curl   curlpp   windows  

类别: curl |  评论(63) |  浏览(1697) |  收藏
63楼 [匿名]dz76gy4s 2009年11月18日 13:09:18 Says:
%E6%9C%8D%E8%A3%85%E6%89%B9%E5%8F%91,5%E5%85%83%E8%B5%B7www.aliichina.com%E8%AE%A2%E8%B4%A7QQ:1036162405%E3
62楼 [匿名]z6psew3d 2009年11月18日 08:05:18 Says:
%E7%A6%BB%E5%AD%90%E6%B8%97%E7%A2%B3%E5%8C%96%E9%92%A8%E5%A4%84%E7%90%86%E5%B7%B2%E8%8D%A3%E8%8E%B7%E5%9B%BD%E5%AE%B6%E5%8F%91%E6%98%8E%E4%B8%93%E5%88%A9(ZL01113768.1)%E6%8A
61楼 [匿名]ulu4c5gq 2009年11月13日 02:36:18 Says:
%E5%BC
60楼 [匿名]grn8xsiv 2009年11月12日 08:33:45 Says:
%E7%A6%BB%E5%AD%90%E6%B8%97%E7%A2%B3%E5%8C%96%E9%92%A8%E5%A4%84%E7%90%86%E5%B7%B2%E8%8D%A3%E8%8E%B7%E5%9B%BD%E5%AE%B6%E5%8F%91%E6%98%8E%E4%B8%93%E5%88%A9(ZL01113768.1)%E6%8A
59楼 [匿名]489a5ayq 2009年11月09日 16:45:40 Says:
%E6%B0%91%E7%94%A8%E9%AD%94%E5%8A%9B%E3
58楼 [匿名]jrtu8p2l 2009年11月08日 18:17:47 Says:
%EF%BC%86%E7%89%B9%E4%BB%B7|%E5%8C%97%E4%BA%AC%E5%88%B0%E5%8A%A0%E6%8B%BF%E5%A4%A7%E6%B8%A9%E5%93%A5%E5%8D%8E%E7%89%B9%E4%BB%B7%E5%9B%BD%E9%99%85%E6%9C%BA%E7%A5%A8|%E5%A5%A5%E8%BF%90%E6%9C%BA%E7%A5%A8%20|%E5%9B%A2%E9%98%9F%E6%9B%B4%E4%BC%98%E6%83%A0%20%0D%0A%E5%8D%95%E7%A8%8B%E4%BB%B7%E6%A0%BC%EF%BC%9A3400%E5%85%83%20%20%20%E5%BE
57楼 [匿名]asgu2pae 2009年10月29日 04:58:38 Says:
%E6%8D%95%E5%85%BD%E4%B8%B8%E9%85%8D%E6%96%B9;%EF%BC%88%E6%8F%90%E4%BE%9B%E9%85%8D%E6%96%99%EF%BC%89%E6%8D%95%E5%85%BD%E4%B8%B8%E6%98%AF%E7%94%A8%E6%9D%A5%E6%8D%95%E9%87%8E%E5%85%BD%E7%94%A8%E7%9A%84%EF%BC%8C%E8%AF%B7%E4%B8%8D%E8%A6%81%E7%94%A8%E6%9D%A5%E6%8D%95%E5%AE%B6%E5%85%BD%E5%AD%90%EF%BC%9B%20%E7%94%A8%E6%B3%95:%0D%0A%E7%94%A8%E8%AF%B1%E9%A5%B5%E3
56楼 [匿名]bnc83ctm 2009年10月25日 09:19:52 Says:
%E5%A4%8D%E5%8D%B0%E6%9C%BA%E6%89%93%E5%8D%B0%E6%9C%BA%E7%A2%B3%E7%B2%89%E9%9B%B6%E5%94%AE9%E5%85%83/%E6%96%A4%E8%B5%B7%EF%BC%81%0D%0A%E6%B0%B8%E8%BF%9C%E4%B8%8D%E8%B5%9A%E9%BB%91%E5%BF%83%E9%92%B1%EF%BC%8C%E5%8F%AA%E8%B5%9A%E5%90%88%E7%90%86%E5%88%A9%E6%B6%A6!%0D%0A%E5%A1%91%E6%96%99%E9%99%A4%E9%BB%84%E5%89%82,%E6%84%9F%E5%85%89%E9%BC%93%E4%BF%AE%E5%A4%8D%E6%B6%B2%E6
55楼 [匿名]jtpgnet 2009年10月25日 01:17:50 Says:
%E4%BD%B3%E7%89%B9%E6%93%A6%E9%9E%8B%E5%BA%97%E5%8A%A0%E7%9B%9F/%E5%AE%B6%E5%BA%AD%E6%B4%97%E9%9E%8B%E5%BA%97%E5%8A%A0%E7%9B%9F/%E4%BD%B3%E7%89%B9%E4%BF%AE%E9%9E%8B%E5%BA%97%E5%8A%A0%E7%9B%9F/%E4%BD%B3%E7%89%B9%E6%B4%97%E9%9E%8B%E5%BA%97%E8%BF%9E%E9%94%81/%E4%BD%B3%E7%89%B9%E6%93%A6%E9%9E%8B%E5%90%A7%E8%BF%9E%E9%94%81/%E4%BD%B3%E7%89%B9%E6%93%A6%E9%9E%8B%E5%90%A7%E5%8A%A0%E7%9B%9F/%E5%8C%97%E4%BA%AC%0D%0A%E5%85%B3%E9%94%AE%E5%AD%97%EF%BC%9A%E6%93%A6%E9%9E%8B%E5%BA%97%E5%8A%A0%E7%9B%9F%20%EF%BC%8C%20%E6%B4%97%E9%9E%8B%E5%BA%97%E5%8A%A0%E7%9B%9F%E8%BF%9E%E9%94%81%20%EF%BC%8C%20%E6%93%A6%E9%9E%8B%E5%90%A7%E5%8A%A0%E7%9B%9F%EF%BC%8C%E4%BF%AE%E9%9E%8B%E5%85%A8%E5%9B%BD%E8%BF%9E%E9%94%81%0D%0A%E5%86%85%E5%AE%B9%EF%BC%9A%E4%BD%B3%E7%89%B9%E5%9F%B9%E8%AE%AD%E4%B8%AD%E5%BF%83%E5%9C%A8%E5%8C%97%E4%BA%AC%E8%AF%9A%E6%8B%9B%E6%93%A6%E9%9E%8B%E5%BA%97%E5%8A%A0%E7%9B%9F%E3
54楼 [匿名]038a6krb 2009年10月20日 03:22:49 Says:
%E4%BE%9B%E5%BA%9407%E5%B9%B4%E4%BA%8C%E6%89%8B%E4%B9%85%E4%BF%9D%E7%94%B0sr75%E6%94%B6%E5%89%B2%E6%9C%BA%E5%A3%B9%E5%8F%B0%EF%BC%8C%E6%B6%A1%E8%BD%AE%E5%A2%9E%E5%8E%8B75%E9%A9%AC%E5%8A%9B%EF%BC%8C%E5%8E%9F%E8%A3%85%E9%A9%BE%E9%A9%B6%E5%AE%A4%EF%BC%8C%E5%B8%A6%E7%A9%BA%E8%B0%83%EF%BC%8C%E6%AF%8F%E5%B0%8F%E6%97%B6%E6%94%B6%E5%89%B2%E6%B0%B4%E7%A8%BB10%E5%88%B015%E4%BA%A9%EF%BC%8C%E6%98%AF%E5%86%9C%E5%9C%BA%E7%A8%BB%E9%BA%A6%E6%94%B6%E5%89%B2%E4%BD%9C%E4%B8%9A%E7%9A%84%E5%BE%97%E5%8A%9B%E5%8A%A9%E6%89%8B%E3
53楼 [匿名]b4qf8anz 2009年10月20日 01:24:26 Says:
%E7%A6%BB%E5%AD%90%E6%B8%97%E7%A2%B3%E5%8C%96%E9%92%A8%E5%A4%84%E7%90%86%E7%9A%84%E8%B6%85%E9%AB%98%E8
52楼 [匿名]jtpgnet 2009年10月18日 17:50:06 Says:
%E4%BD%B3%E7%89%B9%E8%A3%98%E7%9A%AE%E6%94%B9%E5%88%B6%E6%8A
51楼 [匿名]j5ohau7g 2009年10月17日 16:39:46 Says:
%E5%8D%9A%E5%AE%A2%E7%BE%A4%E5%8F%91%E8%BD%AF%E4%BB%B6www.cs988.com%E8%AE%BA%E5%9D%9B%E7%BE%A4%E5%8F%91%E8%BD%AF%E4%BB%B6www.cs988.comj5ohau7g
50楼 [匿名]jtpgnet 2009年10月16日 08:13:31 Says:
%E4%BD%B3%E7%89%B9%E7%9A%AE%E9%9D%A9%E8%AF%9A%E6%8B%9B%E6%B2%99%E5%8F%91%E6%8A%A4%E7%90%86%E5%8A%A0%E7%9B%9F%E5%95%86%EF%BC%8C%E6%B2%99%E5%8F%91%E6%B8%85%E6%B4%97%E5%8A%A0%E7%9B%9F%E5%95%86%EF%BC%8C%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0%E5%8A%A0%E7%9B%9F%E5%BA%97%EF%BC%8C%E8%BF%98%E6%8F%90%E4%BE%9B%E6%B2%99%E5%8F%91%E6%B8%85%E6%B4%97%E7%BF%BB%E6%96%B0%E6%8A
49楼 [匿名]ckm84qla 2009年10月15日 09:46:37 Says:
%E5%8D%9A%E5%AE%A2%E7%BE%A4%E5%8F%91%E8%BD%AF%E4%BB%B6www.cs988.com%E8%AE%BA%E5%9D%9B%E7%BE%A4%E5%8F%91%E8%BD%AF%E4%BB%B6www.cs988.comckm84qla
48楼 [匿名]1e9uddpq 2009年10月14日 00:10:43 Says:
%E6%B0%91%E7%94%A816%E4%BB%B6%E5%A5%97%E5%BC%BA%E5%BC
47楼 [匿名]i3a2fgj3 2009年10月12日 22:04:27 Says:
%E5%8D%9A%E5%AE%A2%E7%BE%A4%E5%8F%91%E8%BD%AF%E4%BB%B6www.cs988.com%E8%AE%BA%E5%9D%9B%E7%BE%A4%E5%8F%91%E8%BD%AF%E4%BB%B6www.cs988.com%E7%BD%91%E7%BB%9C%E8%90%A5%E9%94
46楼 [匿名]fs5wv0ct 2009年09月29日 03:53:04 Says:
%E4%B8%9C%E8%8E%9E%E5%B8%82%E6%9D%8E%E6%B0%8F%E9%94%81%E8%89%BA%E5%85%AC%E5%8F%B8/%E8%81%94%E7%B3%BB%E7%94%B5%E8%AF%9D%EF%BC%9A15015136805%20%0D%0A%E9%94%81%E5%8C%A0%E4%BF%AE%E5%BC
45楼 [匿名]csq2kamg 2009年09月28日 19:12:14 Says:
%E5%BC
44楼 [匿名]xjq5rdji 2009年09月26日 04:50:55 Says:
%E7%B2%BE%E5%93%81%E5%A5%B3%E8%A3%85%20%E6%97%A5%E9%9F%A9%E6%9C%9D%E6%B5%81%20%E4%B8%BB%E8%90%A5%E9%9F%A9%E7%89%88%E6%9C%8D%E8%A3%85%E6%89%B9%E5%8F%91,%E6%B7%98%E5%AE%9D%E6%9C%8D%E8%A3%85%E6%89%B9%E5%8F%91,%E9%9F%A9%E7%89%88%E5%A5%B3%E8%A3%85%E6%89%B9%E5%8F%91,%E5%A4%96%E8%B4%B8%E6%9C%8D%E8%A3%85%E6%89%B9%E5%8F%91%E9%9B%B6%E5%94%AE%EF%BC%81%E7%B2%BE%E5%93%81%E6%9C%8D%E9%A5%B0%20%E5%A4%96%E5%A5%97%20%E9%A9%AC%E7%94%B2%20%E5%90%8A%E5%B8%A6%20%E8%A1%AC%E8%A1%AB%20%E8%BF%9E%E8%A1%A3%E8%A3%99%20%E8%A3%A4%E5%AD%90%E7%B3%BB%E5%88%97%20%E9%A3%8E%E8%A1%A3%E7%B3%BB%E5%88%97%20T%E6%81%A4%20%E5%93%81%E7%89%8C%0D%0Astyleonme%20%E9%9F%A9%E5%9B%BD%E6%AD%A3%E5%93%81%20naning9%20%E9%9F%A9%E5%9B%BD%E6%AD%A3%E5%93%81%20%20%E6%96%B0%E5%93%81%E6%9C%8D%E8%A3%85%E4%B8%8D%E6%96%AD%E6%9B%B4%E6%96%B0%E4%B8%AD%EF%BC%81%20%E8%A5%BF%E6%9C%8D%20%E8%BF%9E%E8%A1%A3%E8%A3%99%20%20%E5%8D%8A%E8%BA%AB%E8%A3%99%20%E6%AC%BE%E5%BC%8F%E5%BE%88%E5%A4%9A%0D%0A%E6%B7%98%E5%AE%9D%E7%BD%91%E5%A5%B3%E8%A3%85,%E6%B7%98%E5%AE%9D%E7%BD%91%E7%BD%91%E4%B8%8A%E8%B4%AD%E7%89%A9%E5%A5%B3%E8%A3%85,%E7%A7%8B%E5%AD%A3%E6%9C%8D%E8%A3%85,%E5%A4%96%E8%B4%B8%E5%8E%9F%E5%8D%95%20KOOKAI%E7%A7%8B%E5%86%AC%E6%AC%BE%20%E8%81%8C%E4%B8%9A%20%E7%99%BE%E6%90%AD%E6%AC%BE%20%E8%81%8C%E4%B8%9A%E8%A3%85%0D%0A%E5%8F%AF%E6%89%B9%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%9C%8D%E6%AC%BE%E5%BC%8F%E5%BE%88%E5%A4%9A%E6%83%85%E4%BE%A3%E8%A3%85%20%E4%B9%9F%E6%9C%89%E7%9A%84%E6%AC%A2%E8%BF%8E%E5%A4%A7%E5%AE%B6%E5%89%8D%E6%9D%A5%E8%B4%AD%E4%B9%B0%20%E6%89%B9%E5%8F%91%E9%9B%B6%E5%94%AE%E9%83%BD%E5%8F%AF%E4%BB%A5%20%E5%85%AC%E5%8F%B8%E5%8F%AF%E8%AE%A2%E8%B4%AD%E5%B7%A5%E4%BD%9C%E6%9C%8D%E3
« 1 234» Pages: ( 1/4 total )
发表评论
看不清楚,换一张