使用libcurl发送HTTP请求的一个简单示例代码

代码简单解释

设置header

首先要声明header的结构体变量,然后设置对应header值,最后将其设置到curl结构体中

//声明
CURL *curl;
struct curl_slist *headers = NULL;

//赋值header值
headers = curl_slist_append(headers, "Host: 0xz.sz.qcloud.com");
headers = curl_slist_append(headers, "yousa3: zym");

//设置header
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

指定url

//声明url
string url = "http://10.54.69.29:80/test/usr/loveqiqian";

//指定url
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

//发送http请求
res = curl_easy_perform(curl);

设置HTTP请求的body

这里发送的请求是POST请求,通过如下代码设置的是POST请求
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

如果没有指定contenttype,那么contenttype默认是post的标准表单格式,application/x-www-form-urlencoded

设置body是如下代码:

//先用char[] 准备好要发送的body字符串
char hello[12] = "a=hello";

//设置body长度以及内容
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(hello));
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, hello);

//然后就可以使用easy_perform接口发送了。

获取响应响应码

res获取到的就是HTTP响应码

res = curl_easy_perform(curl);

获取响应header以及响应body

//声明
string header;
string result;

//设置
curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, &write_data);
curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);

//write_data函数是这样
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp){
    char *d = (char*)buffer;
    string *b = (string*)(userp);
    int result = 0;
    if (b != NULL){
        b->append(d, size*nmemb);
        result = size*nmemb;
    }
    return result;
}

PS:HEAD请求的响应是没有body的,需要额外设置一行

curl_easy_setopt(curl, CURLOPT_NOBODY, 1);

代码

#include <stdio.h>
#include <iostream>
#include <curl/curl.h>
#include <string.h>

using namespace std;

size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);

int main() {
    cout<<"hello world" << endl;

    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();
    string url = "http://10.54.69.29:80/test/usr/loveqiqian";
    string header;
    string result;
    struct curl_slist *headers = NULL;
    char hello[12] = "a=hello";



    headers = curl_slist_append(headers, "Host: 0xz.sz.qcloud.com");
    headers = curl_slist_append(headers, "yousa3: zym");

    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(hello));
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, hello);

    curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, &write_data);
    curl_easy_setopt(curl, CURLOPT_HEADERDATA, &header);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &result);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
    res = curl_easy_perform(curl);

    cout << header << endl << endl;
    cout << result << endl;
    cout << res << endl;
    curl_easy_cleanup(curl);

    return 0;

}

size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp){
    char *d = (char*)buffer;
    string *b = (string*)(userp);
    int result = 0;
    if (b != NULL){
        b->append(d, size*nmemb);
        result = size*nmemb;
    }
    return result;
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用libcurl库在Qt中发送HTTP请求,与Flask服务器进行通信。以下是一个简单示例代码: ```c++ #include <QCoreApplication> #include <QDebug> #include <QUrl> #include <curl/curl.h> // 回调函数,用于处理curl请求的响应数据 size_t handle_response(char *buffer, size_t size, size_t nmemb, void *userdata) { QByteArray *response = static_cast<QByteArray*>(userdata); response->append(buffer, size * nmemb); return size * nmemb; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 初始化curl curl_global_init(CURL_GLOBAL_ALL); CURL *curl = curl_easy_init(); // 设置请求的URL QUrl url("http://localhost:5000/api/test"); // 设置curl选项 curl_easy_setopt(curl, CURLOPT_URL, url.toString().toStdString().c_str()); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, handle_response); // 发送请求 QByteArray response; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); CURLcode result = curl_easy_perform(curl); if (result != CURLE_OK) { qDebug() << "Error: " << curl_easy_strerror(result); } else { qDebug() << "Response: " << response; } // 清理curl curl_easy_cleanup(curl); curl_global_cleanup(); return a.exec(); } ``` 在上面的示例中,我们使用了`curl_easy_setopt`函数设置了curl选项,包括请求的URL、是否跟随重定向、响应数据的处理函数等。我们使用了`curl_easy_perform`函数发送请求并获取响应数据,最后使用`curl_easy_cleanup`函数清理curl。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值