libcurl库api使用
1.主要介绍libcurl库中CURLOPT_WRITEFUNCTION、CURLOPT_WRITEDATA这两个常用选项以及回调函数的功能与使用;其中定义的Data类的主要作用是用来完成数据的保存功能;
/*************************************************************************
* File Name: curl.c
* Author: The answer
* Function: Other
* Mail: 2412799512@qq.com
* Created Time: 2017年07月13日 星期四 11时25分52秒
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<curl/curl.h>
#include<iostream>
#define LEN 8192
using namespace std;
/* Data类的作用是用来完成保存数据的功能 */
class Data
{
public:
Data(int size){
this->mBuf = new char[size];
this->mSize = size;
this->mDataSize = 0;
}
~Data(){this->mDataSize = 0;};
public:
char *mBuf;
int mSize;
int mDataSize;
};
/* 回调函数function原型是:
* size_t function(void *ptr,size_t size,size_t nmemb,void *stream)
* */
size_t callBack(char *ptr,size_t size,size_t nmemb,void *data)
{
Data *d = (Data*)data;
int len = size * nmemb;
memcpy(d->mBuf + d->mDataSize,ptr,len);
d->mDataSize += len;
return len;
}
int main(int argc,char **argv)
{
CURL *curl = curl_easy_init();
/* 定义CURLcode类型的变量,用于保存返回的状态码 */
CURLcode code;
/* curl_easy_version 获取当前libcurl库的版本号 */
char *str = curl_version();
cout<<"当前的libcurl库版本是:"<<str<<endl;
if(!curl)
{
cout<<"curl_easy_init error"<<endl;
return 0;
}
Data d(LEN);
code = curl_easy_setopt(curl,CURLOPT_URL,"http://127.0.0.1/lxg.html");
if(code != CURLE_OK)
{
cout<<"curl_easy_setopt error"<<endl;
return -1;
}
code = curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,callBack);
if(code != CURLE_OK)
{
cout<<"curl_easy_setopt error"<<endl;
return -1;
}
/* CURLOPT_WRITEDATA用来表明CURLOPT_WRITEFUNCTION函数中stream指针的来源 */
code = curl_easy_setopt(curl,CURLOPT_WRITEDATA,&d);
if(code != CURLE_OK)
{
cout<<"curl_easy_setopt error"<<endl;
}
code = curl_easy_perform(curl);
if(code != CURLE_OK)
{
cout<<"curl_easy_perform error."<<endl;
return -1;
}
/*
curl_easy_perform 函数说明(error 状态码)
该函数完成curl_easy_setopt指定的所有选项,这里着重介绍curl_easy_perform的返回值。返回0意味一切ok,非0代表错误发生。主要错误码说明:
1. CURLE_OK
任务完成一切都好
2 CURLE_UNSUPPORTED_PROTOCOL
不支持的协议,由URL的头部指定
3 CURLE_COULDNT_CONNECT
不能连接到remote 主机或者代理
4 CURLE_REMOTE_ACCESS_DENIED
访问被拒绝
5 CURLE_HTTP_RETURNED_ERROR
Http返回错误
6 CURLE_READ_ERROR
读本地文件错误
*/
cout<<"d.mBuf = "<<d.mBuf<<endl;
curl_easy_cleanup(curl);
return 0;
}
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
