IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 基于libcurl的开发 -> 正文阅读

[网络协议]基于libcurl的开发

0.Reference

官网:https://curl.se/

B站阅读的小哥的视频

知乎的一片好文

安装文档

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

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

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

libcurl使用方法简介

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 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/


?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:58:43  更:2022-03-22 20:59:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:37:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码