云起工作室 15711107967
19-http
2025-02-06 10:43:13

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();


};