使用libcurl请求https的get/post

这篇具有很好参考价值的文章主要介绍了使用libcurl请求https的get/post。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近有个需求,需要用c++请求下我自己的服务器,周末看了一下怎么发起http请求。
官方文档见:

https://curl.se/libcurl/c/example.html

官网的demo是基于c的,我用的时候报错了。下面是我写的get/post的方法,同步执行。文章来源地址https://www.toymoban.com/news/detail-730577.html

namespace yeshen_http
{
  struct MemoryStruct
  {
    char *memory;
    size_t size;
  };

  static size_t
  WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
  {
    size_t realsize = size * nmemb;
    struct MemoryStruct *mem = (struct MemoryStruct *)userp;

    void *ptr = realloc(mem->memory, mem->size + realsize + 1);
    if (!ptr)
    {
      std::cout << "not enough memory (realloc returned NULL)" << std::endl;
      return 0;
    }
    mem->memory = (char *)ptr;
    memcpy(&(mem->memory[mem->size]), contents, realsize);
    mem->size += realsize;
    mem->memory[mem->size] = 0;
    return realsize;
  }

  static const char *get_url = "https://yeshen.org";
}

int HTTP::get(const char *url, std::string &response)
{
  CURL *curl = curl_easy_init();

  struct yeshen_http::MemoryStruct chunk;
  chunk.memory = (char *)malloc(1);
  chunk.size = 0;

  if (curl)
  {
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, yeshen_http::WriteMemoryCallback);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
    CURLcode res = curl_easy_perform(curl);
    int retCode = -1;
    if (res != CURLE_OK)
    {
      std::cerr << "curl_easy_perform() failed:" << curl << curl_easy_strerror(res) << std::endl;
    }
    else if (chunk.size == 0)
    {
      std::cout << (unsigned long)chunk.size << " bytes retrieved" << std::endl;
    }
    else
    {
      std::cout << (unsigned long)chunk.size << " bytes retrieved" << std::endl;
      response = chunk.memory;
      retCode = 0;
    }
    free(chunk.memory);
    curl_easy_cleanup(curl);
    return retCode;
  }
  return -1;
}

int HTTP::post(const char *url, const std::string &data)
{
  CURL *curl = curl_easy_init();
  if (curl)
  {
    const char *data_str = data.c_str();
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data_str);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(data_str));
    CURLcode res = curl_easy_perform(curl);
    if (res != CURLE_OK)
    {
      std::cerr << "curl_easy_perform() failed:" << curl_easy_strerror(res) << std::endl;
      return -1;
    }
    curl_easy_cleanup(curl);
    return 0;
  }
  return -1;
}

cmake部分的处理

target_link_libraries(${YESHEN_TARGET_NAME} PRIVATE 
    libcurl.so
)

到了这里,关于使用libcurl请求https的get/post的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java get/post的https请求忽略ssl证书认证

    unable to find valid certification path to requested target 工具类 使用方法

    2024年02月11日
    浏览(10)
  • 由浅入深C系列五:使用libcurl进行基于http get/post模式的C语言交互应用开发

    大多数在linux下的开发者,都会用到curl这个命令行工具。对于进行restful api的测试等,非常方便。其实,这个工具还提供了一个C的开发库,可以很方便的在C语言开发环境下完成基于http的请求和响应交互,高效的开发基于http/smtp等的网络应用程序 下载并安装curl的开发包 开发

    2024年02月13日
    浏览(12)
  • 【网络应用层协议】【HTTP】详解HTTP与HTTPS、POST 请求与 GET请求 、TCP与UDP、cookie和session的区别

    目录 1. HTTP和HTTPS的区别 2. POST 请求与 GET 请求区别 3. TCP与UDP的区别 4. cookie和session的区别

    2024年04月14日
    浏览(17)
  • 使用Postman发送GET请求和POST请求

    使用Postman发送GET请求和POST请求

    Postman是一款流行的API测试和开发工具,它提供了一个易于使用的界面,用于发送HTTP请求并与REST、SOAP和其他Web服务进行交互。以下是对Postman的简单介绍: 发送HTTP请求:Postman允许您以简单直观的方式发送各种类型的HTTP请求(GET、POST、PUT、DELETE等)到指定的URL。您可以设置请

    2024年02月05日
    浏览(13)
  • 使用python get post数据 http https

    使用python get post数据 http https

    目的比较简单,测试,使用python来提交数据是非常简洁的,修改代码也容易,除了做人工智能,本身也是一个非常好的测试端工具 一个简单的示例程序,将 headers 内容置为’application/json’,为了演示,每次修改提交数据number的值,向服务器程序的8000端口提交data,for 循环提交

    2024年02月16日
    浏览(8)
  • java中使用hutool调用get请求,post请求

    一、hutool工具包实现 1、get请求 2、post请求 二、java net实现 1、java中http协议调用get请求 2、java中https协议调用get请求

    2024年02月11日
    浏览(11)
  • postman使用POST,却收到的是GET请求

    postman使用POST,却收到的是GET请求

    现象:   可以看到我们postman发出的确实是post请求,message却报错这个接口不支持get请求,说明服务器实际上收到的是一个get请求。 产生原因分析 如果我们访问的是线上的接口,线上的nginx一般都会对http访问做一个302重定向,跳转为https访问。 如果我们正常访问一个页面,它

    2024年04月12日
    浏览(16)
  • C# 使用WebRequest发送post和get请求

    目录 1.get请求方式 1.1不需要请求参数时 1.2请求参数可以用表单数据(键值对)拼接时 2.POST请求方式 2.1请求参数为json字符串格式时 2.2请求参数为表单数据(键值对)格式时 2.3请求参数为多分部数据(复合式表单)格式时,(以上传文件接口为例) 本文主要介绍了通过C#中的WebRequest来发

    2023年04月08日
    浏览(9)
  • 如何使用postman 进行get或post请求通俗讲解

    如何使用postman 进行get或post请求通俗讲解

    get请求,可以直接用浏览器拼上参数,即可进行访问,也可以通过postman访问; 1、通过浏览器:比如宿主机IP拼上参数,比如:http://10.1.1.67:55000/config   2、通过postman访问,选择get,然后输入http://10.1.1.67:55000/config,点击send   浏览器不可以,只能用postman方式,主要有几点,选

    2024年02月14日
    浏览(14)
  • 使用C#发送HTTP的Get和Post请求

    2024年02月07日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包