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,和用户认证。

官网地址 http://curl.haxx.se/

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

2.重要接口

3.curl_easy_perform的返回值

response=curl_easy_perform(curl);
response返回的状态值

#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 serverdue to lack of access - when login failsthis 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 errorinstead of a memory allocation error if CURL_DOES_CONVERSIONSis 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 fingerprintwasn'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 asdefault */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 rewindthat failed */CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */CURLE_LOGIN_DENIED, /* 67 - user, password or similar was notaccepted 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 conversioncallbacks using curl_easy_setopt optionsCURLOPT_CONV_FROM_NETWORK_FUNCTION,CURLOPT_CONV_TO_NETWORK_FUNCTION, andCURLOPT_CONV_FROM_UTF8_FUNCTION */CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missingor wrong format */CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */CURLE_SSH, /* 79 - error from the SSH layer, somewhatgeneric so the error message will be ofinterest when this has happened */CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSLconnection */CURLE_AGAIN, /* 81 - socket is not ready for send/recv,wait till it's ready and try again (Addedin 7.18.2) */CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing orwrong format (Added in 7.19.0) */CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed.  (Added in7.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的开发相关推荐

  1. TensorRT 基于Yolov3的开发

    TensorRT 基于Yolov3的开发 Models Desc tensorRT for Yolov3 https://github.com/lewes6369/TensorRT-Yolov3 Te ...

  2. 为什么您应该使用基于标准的开发实践

    为什么您应该使用基于标准的开发实践 Why you should use standards-based development practices (even if you don't have t ...

  3. 应用基于资产的开发到 SOA 的服务中1

    SOA 的主要原则之一是在整个 SOA 生命周期中将服务视为可重用资产.因此,务必在 SOA 中对服务应用正式的资产开发流程和指南.本文可帮助 IT 架构师.项目经理和 SOA 管理员全面了解一些主要 ...

  4. mysql for循环_基于Swoole扩展开发异步高性能的MySQL代理服务器

    MySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵.开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减 ...

  5. 基于.Net Core开发现代化Web应用程序系列课程和文章

    这个系列课程是Anduin2017在B站上传的: 基于.Net Core开发现代化Web应用程序系列课程第1课之:课程简介 基于.Net Core开发现代化Web应用程序系列课程第2课之:.Net平台 ...

  6. geany配置python_Linux系统下搭建基于Geany+Python开发环境

    Linux系统下搭建基于Geany+Python开发环境 一.升级python mkdir /usr/local/python3 # tar xvf Python-3.6.1.tar.xz # 解压文 ...

  7. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  8. 官宣!微软宣布桌面版 Edge将基于Chromium进行开发\n

    今天,Windows副总裁Joe Belfiore在Windows官方博客上正式宣布桌面版 Edge将基于Chromium进行开发,以减少Web开发生态的碎片化,为用户提供更高的Web兼容性,这一消息 ...

  9. mysql异步扩展_基于Swoole扩展开发异步高性能的MySQL代理服务器

    MySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵.开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减 ...

最新文章

  1. android混淆多个a b c,混淆A,B,C网络类
  2. mininet在哪编写python脚本_1 mininet 简介及同时支持python2和python3
  3. android搜索文字变色_Android实现TextView字符串关键字变色的方法
  4. 前端框架:AntdUI 文档入门
  5. js获取textarea中的回车换行
  6. M1卡说明及使用proxmark3破解方法
  7. Springboot入门1
  8. BZOJ2681 : 玩游戏2
  9. Eclipse中自动生成get/set时携带注释
  10. 深入分析MVC中通过IOC实现Controller依赖注入的原理
  11. java wsdl 生成_请问java文件wsdl文件如何生成
  12. 16天7000dict
  13. 小米MIUI线刷包cust.img、system.img精简教程(一)
  14. 【QT】缺少Qt5Widgetsd.dll等文件的问题
  15. ios 扇形 按钮_iOS开发教程之扇形动画的实现
  16. 如何在谷歌浏览器内设置http代理?
  17. 微信开发者工具:单个安装微信开发者工具中没有的扩展(通过vsix 离线安装)
  18. 词法分析扫描器的设计实现
  19. 使用命令行配置启动windows服务
  20. Led智慧照明系统功能

热门文章

  1. 电脑打字卡顿,onenote、word使用时打字卡顿一下后才显示的解决方案
  2. Python 日期和时间day12
  3. 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果...
  4. ACM--A - Telephone Number
  5. Spark MLlib 入门--Breeze函数
  6. Pyecharts数据可视化实战 | 分析CSDN周排Top100博主
  7. JasperReport使用说明
  8. ESMTP身份验证机制
  9. Your branch and 'origin/master' have diverged, and have 1 and 3 different commits each, respectively
  10. 回顾2013,展望2014