libcurl中文手册,libcurl.lib
网络库使用心得-浪迹天涯-丙博客
网络库使用心得网络库为一个免费开源的,客户端全球资源定位器(统一资源定位器)传输库,支持FTP,FTPS,TFTP,HTTP,HTTPS,地鼠,远程登录,字典,文件和LDAP,跨平台,支持Windows、Unix、Linux等,线程安全,支持Ipv6。并且易于使用。
http://curl.haxx.se/libcurl/
从http://curl.haxx.se/libcurl/下载一个稳定的版本,注意选择操作系统。
在使用之前请大家多阅读网络库的文档:因为如果要实际运用到项目中,最好对网络库有具体的了解,具体在
http://curl.haxx.se/libcurl/c/
curl_easy_setopt()
curl_easy_perform()
curl_easy_getinfo()
这三个函数的使用上,需要多去钻研,多看样品,你才能灵活使用libcurl。
感谢这篇文章:
http://博客。163 .com/Xu _ Chao 2000/blog/static/27770610200801303252802/
给了我许多启发,再次感谢!
给出我的一个简单的代码例子:
说明:
1.关键在卷曲_简易_设置函数设置选项,可以设置ftp,http,get,post等许多选项,请根据具体使用情况设置。
2.对取回来的数据需要进行判断,比如超文本传送协议(超文本传输协议的缩写)下载文件,如果文件不存在,需要进行处理。因为作者是可以将布法罗填充404未找到等网页内容的,不能将这个内容当成文件内容,所以需要判断服务返回来的代码,进行判断。
3.我有个问题,就是想得到服务器上文件名的具体名称,详细调试已经返回了,但是我在简介的时候,试过好多选项,但未找到这个存放真实服务器文件名的选项,如果有知道的麻烦告诉我,谢谢了!
#包含" curl/curl.h "
#pragmacomment(lib, libcurl.lib )
long writer(void *data,int size,int nmemb,string content);
bool CurlInit(CURL* curl,const char* url,string content);
bool GetURLDataBycurl(const char * URL,字符串内容);
voidmain()
{
char * URL= http://www。百度一下。com/img/百度。gif ;
字符串内容;
if(GetURLDataBycurl(url,content))
{
printf(%sn ,内容);
}
getchar();
}
bool CurlInit(CURL* curl,const char* url,字符串内容)
{
CURLcodecode
字符串错误;
curl=curl_easy_init()。
if(curl==NULL)
{
printf( FailedtocreateCURLconnection n );
返回错误的
}
code=curl_easy_setopt(curl,CURLOPT_ERRORBUFFER,error);
如果(代码!=CURLE_OK)
{
printf( failedtoseterrobuffer[% d] n ,代码);
返回错误的
}
curl_easy_setopt(curl,CURLOPT_VERBOSE,1L);
code=curl_easy_setopt(curl,CURLOPT_URL,URL);
如果(代码!=CURLE_OK)
{
printf(FailedtosetURL[%s]n ,错误);
返回错误的
}
code=curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1);
如果(代码!=CURLE_OK)
{
printf( Failedtosetredirectoption[% s] n ,错误);
返回错误的
}
code=curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writer);
如果(代码!=CURLE_OK)
{
printf( Failedtosetwriter[% s] n ,错误);
返回错误的
}
code=curl_easy_setopt(curl,CURLOPT_WRITEDATA,content);
如果(代码!=CURLE_OK)
{
printf( Failedtosetwritedata[% s] n ,错误);
返回错误的
}
返回真实的
}
长编写器(void *data,int size,int nmemb,string content)
{
长尺寸=大小* nmemb
字符串温度(数据,大小);
内容=温度
returnsizes
}
bool GetURLDataBycurl(const char * URL,字符串内容)
{
卷曲*卷曲=空
CURLcodecode
字符串错误;
代码=CURL _ GLOBAL _ init(CURL _ GLOBAL _ DEFAULT);
如果(代码!=CURLE_OK)
{
printf( Failedtoglobalinitdefault[% d] n ,代码);
返回错误的
}
如果(!CurlInit(curl,url,内容))
{
printf( Failedtoglobalinitdefault[% d] n );
returnPM _ FALSE
}
code=curl _ easy _ perform(curl);
如果(代码!=CURLE_OK)
{
printf(Failedtoget%s[%s]n ,URL,错误);
返回错误的
}
长retcode=0;
code=curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE,ret CODE);
if((code==CURLE _ OK)retcode==200)
{
double length=0;
code=curl_easy_getinfo(curl,curl info _ CONTENT _ LENGTH _ DOWNLOAD,LENGTH);
printf(%d ,retcode);
FILE*file=fopen(1.gif , WB );
fseek(file,0,SEEK _ SET);
fwrite(content.c_str(),1,length,file);
fclose(文件);
//struct curl _ slist * list;
//code=curl_easy_getinfo(curl,CURLINFO_COOKIELIST,list);
//curl _ slist _ free _ all(list);
返回真实的
}
其他
{
//debug1(%sn ,getStatusCode(retcode));
返回错误的
}
curl _ easy _ clean up(卷曲);
返回错误的
}