libcurl qt linux,qt封装的libcurl http请求类

#ifndef YCURL_H

#define YCURL_H

#include

#include "YCHttp.h"

#include

#include

#include

#include

#include

#include

#ifdef Q_OS_WIN

#include "D:/MP/github/vcpkg/installed/x64-windows/include/curl/curl.h"

#else

#ifndef Q_OS_ANDROID

#include "/usr/local/curl/include/curl/curl.h"

#endif

#endif

class YCUrl : public QObject

{

Q_OBJECT

public:

explicit YCUrl(QObject *parent = nullptr);

~YCUrl();

static bool Init();

static void Cleanup();

bool get(const QString &url,QString &responseData, YCHeaderIndex nIndex = URL2_None,int nTimeOut = 10*1000);

// bool get(const QByteArray &url,QByteArray &responseByte, YCHeaderIndex nIndex = URL2_None,int nTimeOut = 10*1000);

bool get(const QString &url,QByteArray &responseByte, YCHeaderIndex nIndex = URL2_None,int nTimeOut = 10*1000);

bool getImage(const QString &url, QPixmap &responseData, YCHeaderIndex nIndex = URL2_None, QByteArray postData = "", int nTimeOut = 10*1000);

// bool getImage(const QByteArray &url, QPixmap &responseData, YCHeaderIndex nIndex = URL2_None, QByteArray postData = "", int nTimeOut = 10*1000);

bool post(const QString &url,QByteArray &postByte,QByteArray &responseByte, YCHeaderIndex nIndex = URL2_PostDefaut,int nTimeOut = 10*1000);

// bool post(const QByteArray &url,QByteArray &postByte,QByteArray &responseByte, YCHeaderIndex nIndex = URL2_PostDefaut,int nTimeOut = 10*1000);

bool post(const QString &url,const QUrlQuery &query,QString &responseData, YCHeaderIndex nIndex = URL2_PostDefaut,int nTimeOut = 10*1000);

bool post(const QString &url,const QUrlQuery &query,QByteArray &responseByte, YCHeaderIndex nIndex = URL2_PostDefaut,int nTimeOut = 10*1000);

void setCookie(const QString &name,const QString &value);

CURLcode httpRequest(const QByteArray& strUrl, int nHttpType = YCHTTP_POST_BYTE, const QByteArray& bytePost = QByteArray(), YCHeaderIndex nIndex = URL2_None,

int nTimeOut = 10*1000);

static size_t ResponseHeaderFunction(char *buffer, size_t size, size_t nitems, void *userdata);

static size_t ResponseContentFunction(char *ptr, size_t size, size_t nmemb, void *userdata);

static bools_bInit;//是否初始化

static CURLSH*s_pShareHandle;//共享curl句柄

QMutex m_mutex;

CURL*m_hCurl;//easycurl句柄

QStringList m_header;

void setHeader(curl_slist **header, YCHeaderIndex nIndex)

{

switch(nIndex)

{

case URL2_None:

{

*header = curl_slist_append(reinterpret_cast(*header), "");

break;

}

case URL2_GetDefaut:

*header = curl_slist_append(reinterpret_cast(*header), "User-Agent:Mozilla/5.0");

break;

case URL2_PostDefaut:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:application/x-www-form-urlencoded; charset=UTF-8");

break;

case URL2_PostJson:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:application/json");

break;

case URL2_PostXml:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:application/xml");

break;

case URL2_PostZip:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:application/zip");

break;

case URL2_PostPlainText:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:text/plain");

break;

case URL2_PostHtml:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:text/html");

break;

case URL2_PostPng:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:image/png");

break;

case URL2_PostJpg:

*header = curl_slist_append(reinterpret_cast(*header), "Content-Type:image/jpg");

break;

case URL2_VerifyCode: //12306

{

//qDebug() << "12306pppp";

*header = curl_slist_append(reinterpret_cast(*header), "Referer: https://kyfw.12306.cn/otn/login/init");

*header = curl_slist_append(reinterpret_cast(*header), "Connection: keep-alive");

*header = curl_slist_append(reinterpret_cast(*header), "Accept: application/json, text/javascript,*/*; q=0.8");

*header = curl_slist_append(reinterpret_cast(*header), "Accept-Encoding: gzip, deflate, br");

*header = curl_slist_append(reinterpret_cast(*header), "Accept-Language: zh-CN,zh;q=0.8");

*header = curl_slist_append(reinterpret_cast(*header), "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36");

break;

}

case URL2_m_header:

{

for(auto str : m_header){

// QString first = str.left(str.indexOf(":")).trimmed();

// QString second = str.right(str.length() - str.indexOf(":") - 1).trimmed();

*header = curl_slist_append(reinterpret_cast(*header), str.toStdString().c_str());

}

//qDebug() << m_header;

break;

}

default:

break;

}

}

signals:

private:

longm_lHttpCode;//http 响应码

std::stringm_strHeader;//响应头

std::stringm_strContent;//响应内容

bool m_bReturn = false;

};

#endif // YCURL_H

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt libcurl 封装是指将libcurl库与Qt框架结合使用,并进行进一步封装,以便在Qt应用程序中更方便地使用libcurl提供的网络功能。 libcurl是一个强大且广泛使用的网络传输库,它支持如HTTP、FTP、SMTP等多种协议,并且提供了丰富的功能和选项,如文件上传、下载、断点续传等。而Qt是一个跨平台的应用程序开发框架,它提供了丰富的图形界面和网络编程的工具。 在将libcurlQt结合使用时,可以编写一个Qt封装类,将libcurl的功能进行封装。这个封装类可以提供一个易于使用的API,使得开发者可以用更简洁的方式完成网络传输的操作。例如,可以提供一个简单的函数来发送HTTP请求,同时支持设置请求头、请求方法等参数。 封装类也可以处理libcurl的回调函数,例如可以设置一个回调函数来接受HTTP请求的响应体,或者设置一个进度回调函数来跟踪上传或下载进度。这样,开发者就可以在Qt应用程序中更方便地处理网络请求的结果和进度。 此外,封装类还可以处理网络传输的错误和异常情况。例如,可以提供一个错误处理函数,用于处理网络请求失败或超时等情况,并提供相应的错误信息给开发者。 通过Qt libcurl封装,开发者可以更方便地使用libcurl提供的功能,并能够充分利用Qt的特性,如信号与槽机制,将网络请求与界面交互进行无缝衔接。这样,开发者可以更高效地开发出基于Qt的网络应用程序,并提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值