libcurl库的网页爬虫程序

news/2024/7/19 12:27:36 标签: selenium, 爬虫, 测试工具

示例代码:

#include <curl/curl.h>
#include <iostream>
​
int main() {
    CURL *curl;
    CURLcode res;
​
    curl_global_init(CURL_GLOBAL_DEFAULT);
​
    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "/");
        curl_easy_setopt(curl, CURLOPT_PROXY, "");
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL); // 使用默认的写入函数
        curl_easy_setopt(curl, CURLOPT_ERRORFUNCTION, NULL); // 使用默认的错误处理函数
​
        res = curl_easy_perform(curl);
​
        if(res != CURLE_OK)
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
​
        curl_easy_cleanup(curl);
    }
​
    curl_global_cleanup();
​
    return 0;
}

解释:

  • #include <curl/curl.h>:这是libcurl库的头文件,包含了libcurl的所有函数声明。

  • #include <iostream>:这是C++的标准输入输出库的头文件,包含了iostream类。

  • curl_global_init(CURL_GLOBAL_DEFAULT):这是初始化libcurl全局变量的函数,CURL_GLOBAL_DEFAULT表示使用默认的设置。

  • curl = curl_easy_init():这是创建一个CURL对象的函数,返回一个CURL指针。

  • curl_easy_setopt(curl, CURLOPT_URL, "https://www.ctrip.com/");:这是设置CURL对象的URL的函数,参数是一个URL字符串。

  • curl_easy_setopt(curl, CURLOPT_PROXY, "www.duoip.cn:8000");:这是设置CURL对象的服务器的函数,参数是一个服务器的IP地址和端口号。

  • curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);:这是设置CURL对象是否跟随重定向的函数,参数是一个整数,1表示跟随重定向,0表示不跟随重定向。

  • curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);:这是设置CURL对象的写入函数的函数,参数是一个函数指针,这个函数在请求成功后会被调用,用来写入请求结果。

  • curl_easy_setopt(curl, CURLOPT_ERRORFUNCTION, NULL);:这是设置CURL对象的错误处理函数的函数,参数是一个函数指针,这个函数在请求失败后会被调用,用来处理错误。

  • curl_easy_perform(curl);:这是执行CURL对象的请求的函数,如果请求成功,这个函数会返回CURLE_OK,如果请求失败,会返回一个错误代码。

  • if(res != CURLE_OK):这是一个条件语句,如果curl_easy_perform()函数返回的错误代码不等于CURLE_OK,就会执行后面的语句。

  • std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;:这是打印错误信息的函数,如果curl_easy_perform()函数返回的错误代码不等于CURLE_OK,就会执行这个函数,打印出错误信息。

  • curl_easy_cleanup(curl);:这是销毁CURL对象的函数,释放CURL对象占用的资源。

  • curl_global_cleanup();:这是销毁libcurl全局变量的函数,释放libcurl占用的资源。

  • return 0;:这是主函数的返回值,表示程序正常结束。


http://www.niftyadmin.cn/n/5126868.html

相关文章

UE4/UE5 设置widget中text的字体Outline

想要在蓝图中控制Widget 中的 text字体&#xff0c;对字体outline参数进行设置。 但是蓝图中无法直接获取设置outline参数的方法&#xff1a; 没有outline相关的蓝图函数 该参数本身是在Font类别下的扩展&#xff0c;所以只要获取设置Font参数即可进行outline的设置 text连出…

华为OD机试 - 滑动窗口最大和 - 滑动窗口(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Spring源码-4.Aware接口、初始化和销毁执行顺序、Scope域

Aware接口 其实在生命周期中&#xff0c;Aware接口也参与进来了&#xff0c;如图所示&#xff1a; 如初始化时的第三步&#xff0c;其实就是调用了Aware相关接口。 以常见的Aware接口举例&#xff1a; 1.BeanNameAware 主要是注入Bean的名字 2.BeanFactoryAware 主要是时注…

【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!

1. 前言 上一篇推文利用一个在图片范围内实现随机坐标点击的例子&#xff0c;去教会大家如何将自己想要的效果实现出来&#xff0c;受到大家的热情反响&#xff0c;在我们官方讨论群中&#xff0c;还有大佬对我们的示例代码进行优化改进&#xff0c;做了很多合理的函数封装&…

一个完整挖洞 /src 漏洞实战流程【渗透测试】

目录: 1.如何找漏洞 2.找到后如何挖漏洞 3.漏洞如何提交 只要搞渗透&#xff0c;不就会听到很多行业内人前辈一直在重复:“信息搜集” 信息搜集有多重要&#xff0c;你搜集的到的多少资产信息&#xff0c;决定了你后续进行的一系列实战到什么程度! 要说 SQL 注入的漏洞咋找…

华晨宝马、南方基金、正泰安能和摩根士丹利荣获2023红帽亚太创新奖

今天&#xff0c;全球领先的企业级开源解决方案提供商红帽公司宣布了2023红帽亚太创新奖中国区获奖名单。在2023 Red Hat Summit&#xff1a;Connect&#xff08;红帽论坛&#xff09;中国站上&#xff0c;华晨宝马、南方基金、正泰安能和摩根士丹利获得奖项&#xff0c;这些企…

B链圆桌派 — 创新的去中心化存储网络 BNB GREENFIELD 主网上线

B链圆桌派 主題: BNB GREENFIELD主网上线 - 创新的去中心化资料储存网路 日期: 10/19, 8 pm utc8 頻道&#xff1a; BNB Chain 华语电报群 ○ AMA环节 ○ BNB GREENFIELD主网上线 一、回复主持人问题 嘉宾回答主持人提出的问题。本环节请大家保持安静&#xff0c;专注嘉宾…

04.Animation

参考JusterZhu视频和文档&#xff0c;ppt文档基本全抄 基本没看懂&#xff0c;过几天有时间了研究下 一、Animation 1.什么是Animation&#xff1f; 动画是快速循环播放一系列图像&#xff08;其中每个图像与下一个图像略微不同&#xff09;给人造成的一种幻觉。再回到WPF开发…