将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 t
|