入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

libcurl库api使用

创建时间:2017-07-13 投稿人: 浏览次数:322

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。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像