libCUrl封装

#ifndef BASE_CURL_H
#define BASE_CURL_H

#include <iostream>
#include <string.h>

#include "curl/curl.h"
#include <json/json.h>

using namespace std;

class BaseCURL
{
public:
    BaseCURL()
    : m_header(NULL)
    , m_curl(NULL)
    {
        curl_global_init(CURL_GLOBAL_ALL);
        m_curl = curl_easy_init();
    }
    ~BaseCURL()
    {
        if (m_header)
        {
            curl_slist_free_all(m_header);
            m_header = NULL;
        }
        if (m_curl)
        {
            curl_easy_cleanup(m_curl);
            m_curl = NULL;
        }
        curl_global_cleanup();
    }

public:
    void SetHeader()
    {
        //m_header = curl_slist_append(m_header, "Content-Type,text/html;charset=UTF-8");
        //m_header = curl_slist_append(m_header, "Connection: Keep-Alive");
        //m_header = curl_slist_append(m_header, "Expect:");
        //m_header = curl_slist_append(m_header, "Accept:*/*");
        
        m_header = curl_slist_append(m_header, "Content-Type: text/xml");
        m_header = curl_slist_append(m_header, "Accept: text/plain");
        m_header = curl_slist_append(m_header, "Content-type: application/x-www-form-urlencoded");
    }
    void SetHeaderEx(const std::string& header)
    {
        SetHeader();
        m_header = curl_slist_append(m_header, header.c_str());
    }

    CURLcode SetPost(const std::string& data, const std::string& url)
    {
        CURLcode ret = SetOpt();
        if ( ret != CURLE_OK)
        {
            return ret;
        }
        m_ret = curl_easy_setopt(m_curl, CURLOPT_USERAGENT, "curl/7.33.0");
        m_ret = curl_easy_setopt(m_curl, CURLOPT_POST, 1);
        m_ret = curl_easy_setopt(m_curl, CURLOPT_POSTFIELDS, data.c_str() );
        m_ret = curl_easy_setopt(m_curl, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)strlen(data.c_str()));
        m_ret = curl_easy_setopt(m_curl, CURLOPT_URL, url.c_str() );
        
        return m_ret;
    }
    CURLcode Perform()
    {
        if (m_ret != CURLE_OK)
        {
            return m_ret;
        }
        m_ret = curl_easy_perform(m_curl);
        char* result;
        curl_easy_getinfo(m_curl, CURLINFO_HTTP_CONNECTCODE, &result);
        return m_ret;
    }
    CURLcode SetOpt()
    {
        m_ret = curl_easy_setopt(m_curl, CURLOPT_VERBOSE, 1);
        m_ret = curl_easy_setopt(m_curl, CURLOPT_HTTPHEADER, m_header);
        //m_ret = curl_easy_setopt(m_curl, CURLOPT_TIMEOUT, 300);
        //m_ret = curl_easy_setopt(m_curl, CURLOPT_CONNECTTIMEOUT, 60);
        return m_ret;
    }

private:
    CURL *m_curl;
    CURLcode m_ret;
    struct curl_slist* m_header;
};

#endif //BASE_CURL_H

 

添加新评论