1、libcurl
下载地址:curl - Download
cmake编译
创建项目
将创建sdk文件夹及其下生成的文件复制到项目根目录
右键项目-》属性-》c/c++-》常规-》附加目录 包含 .\sdk\include
右键项目-》属性-》连接器》常规-》附加目录 包含 .\sdk\lib
右键项目-》属性-》连接器》输入-》附加依赖 -》libcurl-d_imp.lib
将 libcurl-d.dll 复制到debug
使用
#include <sstream>
#include <string>
#include "curl/curl.h"
CURL *curl;
CURLcode res;
curl = curl_easy_init();
stringstream jsonRespon;
if(curl) {
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, "pubapi.ui.cn/projectlst?page=1&size=10&key=ui");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
struct curl_slist *headers = NULL;
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &jsonRespon);
res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);
size_t write_data(void* ptr, size_t size, size_t nmemb, void* stream){
string data( (const char*)ptr, (size_t)size * nmemb );
*( (stringstream*)stream ) << data <<endl;
return size * nmemb;
}
2、qnetwork
QT += network
#include <QNetworkAccessManager>
#include <QDebug>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QJsonObject>
#include <QJsonDocument>
#include <QTimer>
void Widget::on_pushButton_clicked(){
manager = new QNetworkAccessManager(this);
QString url = "http://localhost/test.php";
QNetworkRequest requestInfo;
requestInfo.setUrl(QUrl(url));
requestInfo.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
QJsonObject rawJson;
rawJson.insert("username","zhangshan");
rawJson.insert("pwd","123456");
QByteArray byte_array = QJsonDocument(rawJson).toJson();
QNetworkReply* reply = manager->post(requestInfo,byte_array);
//设置超时时间
QEventLoop eventloop;
connect(reply,SIGNAL(finished()),&eventloop,SLOT(quit()));
QTimer::singleShot(1,&eventloop,&QEventLoop::quit);
eventloop.exec();
if(reply->isFinished()){
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if(statusCode.isValid()){
qDebug()<<"status code = " << statusCode.toInt();
}
QVariant reason = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute);
if(reason.isValid()){
qDebug()<<"reason = " << reason.toString();
}
QNetworkReply::NetworkError err = reply->error();
if(err!=QNetworkReply::NoError){
}else{
QByteArray responseByte = reply->readAll();
QString strRes = responseByte;
qDebug()<<"strRes success";
qDebug()<<strRes;
}
}else{
//请求超时
}
reply->deleteLater();
};