基于libcurl的开发

基于libcurl的开发0 ReferenceB 站阅读的小哥的视频知乎的一片好文 libcurl 使用方法简介 1 简介 libcurl 是一个跨平台的开源网络协议库 支持 http https rtsp 等多种协议 libcurl 同样支持 HTTPS 证书授权 HTTPPOST HTTPPUT FTP 上传 HTTP 基本表单上传 代理 cookies 和用户认证 官网地址 http curl haxx se libcurl 主要提供了两种发送 HTTP 请求的方式 分别是 easyinterfac 方式

0.Reference

官网:https://curl.se/

B站阅读的小哥的视频

知乎的一片好文

安装文档

libculr对http中的参数的设定-忽略或者需要

libcurl中CURLOPT_WRITEFUNCTION设置回调函数-将查询的值写入文件

curl将查询的值写入内存的写法

libcurl使用方法简介

Libcurl实现HTTP/HTTPS客户端(支持get、post、保持session) 

1.简介

libcurl是一个跨平台的开源网络协议库,支持http, https, rtsp等多种协议 。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。

libcurl主要提供了两种发送HTTP请求的方式,分别是easy interface方式和multi interface方式,前者是采用阻塞的方式发送单条请求,后者采用组合的方式可以一次性发送多条请求数据,且多个下载请求是异步进行的。

2.重要接口

3.curl_easy_perform的返回值

#include <curl/curl.h> enum CURLcode { CURLE_OK = 0, CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ CURLE_FAILED_INIT, /* 2 */ CURLE_URL_MALFORMAT, /* 3 */ CURLE_OBSOLETE4, /* 4 - NOT USED */ CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ CURLE_COULDNT_RESOLVE_HOST, /* 6 */ CURLE_COULDNT_CONNECT, /* 7 */ CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */ CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server due to lack of access - when login fails this is not returned. */ CURLE_OBSOLETE10, /* 10 - NOT USED */ CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ CURLE_OBSOLETE12, /* 12 - NOT USED */ CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ CURLE_FTP_CANT_GET_HOST, /* 15 */ CURLE_OBSOLETE16, /* 16 - NOT USED */ CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ CURLE_PARTIAL_FILE, /* 18 */ CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ CURLE_OBSOLETE20, /* 20 - NOT USED */ CURLE_QUOTE_ERROR, /* 21 - quote command failure */ CURLE_HTTP_RETURNED_ERROR, /* 22 */ CURLE_WRITE_ERROR, /* 23 */ CURLE_OBSOLETE24, /* 24 - NOT USED */ CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ CURLE_OUT_OF_MEMORY, /* 27 */ /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error instead of a memory allocation error if CURL_DOES_CONVERSIONS is defined */ CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ CURLE_OBSOLETE29, /* 29 - NOT USED */ CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ CURLE_OBSOLETE32, /* 32 - NOT USED */ CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ CURLE_HTTP_POST_ERROR, /* 34 */ CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ CURLE_FILE_COULDNT_READ_FILE, /* 37 */ CURLE_LDAP_CANNOT_BIND, /* 38 */ CURLE_LDAP_SEARCH_FAILED, /* 39 */ CURLE_OBSOLETE40, /* 40 - NOT USED */ CURLE_FUNCTION_NOT_FOUND, /* 41 */ CURLE_ABORTED_BY_CALLBACK, /* 42 */ CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ CURLE_OBSOLETE44, /* 44 - NOT USED */ CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ CURLE_OBSOLETE46, /* 46 - NOT USED */ CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ CURLE_UNKNOWN_TELNET_OPTION, /* 48 - User specified an unknown option */ CURLE_TELNET_OPTION_SYNTAX, /* 49 - Malformed telnet option */ CURLE_OBSOLETE50, /* 50 - NOT USED */ CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint wasn't verified fine */ CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as default */ CURLE_SEND_ERROR, /* 55 - failed sending network data */ CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ CURLE_OBSOLETE57, /* 57 - NOT IN USE */ CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */ CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized transfer encoding */ CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind that failed */ CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not accepted and we failed to login */ CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ CURLE_TFTP_PERM, /* 69 - permission problem on server */ CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ CURLE_CONV_FAILED, /* 75 - conversion failed */ CURLE_CONV_REQD, /* 76 - caller must register conversion callbacks using curl_easy_setopt options CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPT_CONV_TO_NETWORK_FUNCTION, and CURLOPT_CONV_FROM_UTF8_FUNCTION */ CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing or wrong format */ CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ CURLE_SSH, /* 79 - error from the SSH layer, somewhat generic so the error message will be of interest when this has happened */ CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL connection */ CURLE_AGAIN, /* 81 - socket is not ready for send/recv, wait till it's ready and try again (Added in 7.18.2) */ CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or wrong format (Added in 7.19.0) */ CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in 7.19.0) */ CURL_LAST /* never use! */ };

4. HTTPS参数

(1)CURL_VERIFY_PEER

该参数含义是验证HTTPS请求对象的合法性,就是用第三方证书机构颁发的CA数字证书来解密服务端返回的证书,来验证其合法性。可在编译时就将CA数字证书编译进去,也可以通过参数CURLOPT_CAINFO 或者CURLOPT_CAPATH设置根证书。默认值为1。

(2)CURL_VERIFY_HOST

该参数主要用于https请求时返回的证书是否与请求的域名相符合,避免被中间着篡改证书文件。默认值为2。

如果不想验证PEER和HOST的安全性,可以通过设置以下内容来实现:

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);//忽略证书检查

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);

5.开发示例

5.1 获取html内容

代码:

#include <stdio.h> #include <curl/curl.h> #include <stdlib.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { CURL *curl; //定义CURL类型的指针 CURLcode res; //定义CURLcode类型的变量,保存返回状态码 if (argc != 2) { printf("Usage : file <url>;\n"); exit(1); } curl = curl_easy_init(); //初始化一个CURL类型的指针 if (curl != NULL) { //设置curl选项. 其中CURLOPT_URL是让用户指 定url. argv[1]中存放的命令行传进来的网址 curl_easy_setopt(curl, CURLOPT_URL, argv[1]); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); //调用curl_easy_perform 执行我们的设置.并进行相关的操作. 在这 里只在屏幕上显示出来. res = curl_easy_perform(curl); cout << "res is " << res << endl; //清除curl操作. curl_easy_cleanup(curl); } return 0; }

编译命令:g++ getHtml.cpp -lcurl 

命令行执行命令: ./getHtml https://192.168.244.139/api/projects/

基于libcurl的开发

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231439.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月13日 上午10:01
下一篇 2025年12月13日 上午10:22


相关推荐

  • 微信机器人的制作 原来如此简单

    微信机器人的制作 原来如此简单

    2021年11月10日
    56
  • 熊猫烧香病毒分析报告

    熊猫烧香病毒分析报告1.样本概况1.1样本信息(1)病毒名称:spo0lsv.exe(2)所属家族:熊猫烧香(3)MD5值:B8F8E75C9E77743A61BBEA9CCBCFFD5D(4)SHA1值:188FC8FC580C0EA4BF8A8900A3D36471823C8923(5)CRC32:E63D45D3(6)病毒行为:复制自身到系统目录下设置文件属性为隐藏,并且让…

    2025年8月5日
    6
  • linux环境变量大全,Linux环境变量总结

    linux环境变量大全,Linux环境变量总结Linux 是一个多用户多任务的操作系统 可以在 Linux 中为不同的用户设置不同的运行环境 具体做法是设置不同用户的环境变量 Linux 环境变量分类一 按照生命周期来分 Linux 环境变量可以分为两类 1 永久的 需要用户修改相关的配置文件 变量永久生效 2 临时的 用户利用 export 命令 在当前终端下声明环境变量 关闭 Shell 终端失效 二 按照作用域来分 Linux 环境变量可以分为 1 系统环

    2026年3月17日
    2
  • C++中的虚析构

    C++中的虚析构首先什么是虚析构 虚析构就是析构函数为虚函数 那么为什么要用虚析构呢 是为了 delete 基类指针指向派生类时防止子类得数据不会被释放造成内存泄露 我们看一下下面的例子 首先我们定义一个数据类 MyDataclassM public MyData m Data newchar 10 MyData delete m Data

    2026年3月17日
    2
  • Struts2的通配符配置方式[通俗易懂]

    Struts2的通配符配置方式[通俗易懂]Struts2的Action类很有意思,你可以使用3种方式来实现具体的Action类:以上三种Action的实现方式都可以被struts2框架自动识别,如果你在struts.xml里面配置了一个ac

    2022年7月1日
    26
  • 5 types of thresholding「建议收藏」

    5 types of thresholding「建议收藏」threshold

    2022年5月30日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号