如何正确重复使用卷曲手柄

2024-03-18

我想正确地重用卷曲句柄,这样它就不会给我错误并正常运行。

假设我有这段代码:

    CURL *curl;

    curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();

    curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0...");
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
    curl_easy_perform(curl);

    curl_easy_setopt(curl, CURLOPT_URL, "http://www.bbc.com");
    curl_easy_perform(curl);

    curl_easy_cleanup(curl);
    curl_global_cleanup();

这是重复使用卷曲手柄的好方法还是正确方法?或者我需要使用curl_easy_reset()在那个手柄上?

如果有人建议你在curl中应该避免做什么,我也将不胜感激。也许有人可以给我一个现有信息源的链接?


如果我正确理解了这个问题,您想知道是否可以致电curl_easy_perform() https://curl.haxx.se/libcurl/c/curl_easy_perform.html然后只通过更改urlcurl_easy_setopt() https://curl.haxx.se/libcurl/c/curl_easy_setopt.html然后再打第二个电话?这应该不会出现任何错误,因为该函数不会更改句柄的任何先前设置的选项。这是一个简短的工作示例:

size_t writeCallback(char* contents, size_t size, size_t nmemb, std::string* buffer) {
  size_t realsize = size * nmemb;
  if(buffer == NULL) {
    return 0;
  }
  buffer->append(contents, realsize);
  return realsize;  
}

int main(int argc, char** argv) {
  std::string buffer;

  // Initialize global.
  curl_global_init(CURL_GLOBAL_ALL);

  // Start a libcurl easy session.
  CURL* ch = curl_easy_init();
  if (!ch) {
    // Something went wrong
    curl_global_cleanup();
    return -1;
  }

  // These options will only be set once.
  curl_easy_setopt(ch, CURLOPT_VERBOSE, 0);
  curl_easy_setopt(ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_easy_setopt(ch, CURLOPT_USERAGENT, "Crawler");
  curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, &writeCallback);
  curl_easy_setopt(ch, CURLOPT_WRITEDATA, &buffer);

  // Push a couple of URLs onto queue.
  std::vector<const char*> queue;
  queue.push_back("http://www.google.com");
  queue.push_back("http://www.stackoverflow.com");

  const char* url;
  CURLcode code;

  do {
      // Grab an URL from the queue.
      url = queue.back();
      queue.pop_back();

      // Only change the CURLOPT_URL option for the handle
      // the rest will stay intact.
      curl_easy_setopt(ch, CURLOPT_URL, url);

      // Perform transfer.
      code = curl_easy_perform(ch);

      // Check if everything went fine.
      if (code != CURLE_OK) {
        // Handle any errors.
      }

      // Clear the buffer.
      buffer.clear();
  } while (queue.size() > 0);

  // Cleanup.
  curl_easy_cleanup(ch);
  curl_global_cleanup();

  return 0;
}

或者我是否需要在该句柄上使用curl_easy_reset()?

答案是no since curl_easy_perform() https://curl.haxx.se/libcurl/c/curl_easy_perform.html不会重置任何选项,您的代码应该没问题,您可以坚持只更改网址,例如curl_easy_setoption(curl, CURLOPT_URL, <newurl>);.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确重复使用卷曲手柄 的相关文章

  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • C 中的复合语句表达式

    下面的代码不起作用 int i void 999 100 添加括号就可以了 为什么 int i void 999 100 还有另一种方法可以完成此类分配 int i void 999 100 是什么让他们与众不同 在这份声明中 int i
  • 如何在 MFC 中调整对话框大小时移动控件?

    我已经在 MFC 中创建了对话框视图 从下图中可以清楚地看到 如滑块控件和编辑框等 当我调整对话框大小时 这些控件不会移动 在此输入图像描述 https i stack imgur com 7OxAK jpg 我想移动控件以适应对话框 但不
  • 使用静态类型代替变量

    当您的项目不使用命名空间时 有什么方法可以告诉编译器使用静态类型而不是变量吗 例如 我有一个名为 User 的类 它具有各种静态和非静态方法 假设调用了其中一个静态方法GetUser 我想称之为User GetUser 方法来自一个方法 该
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 如何从 List 中的字符串中删除数字/数字?

    我有一个字符串列表 List
  • 异步方法中的异常未被捕获

    下面的代码没有捕获我的OperationCancelEException 它是通过调用抛出的ct ThrowIfCancellationRequested public partial class TitleWindow Window IA
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • Azure 2012 年 10 月 SDK 损坏 UseDevelopmentStorage=true

    有人尝试过使用 usedevelopmentstorage true 连接字符串的 2012 年 10 月 Azure sdk 吗 CloudStorageAccount Parse UseDevelopmentStorage true 抛
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • C 中“for”循环中的两个变量

    我正在编写一些代码 需要在其中使用两个变量for环形 下面的代码看起来没问题吗 它确实给了我预期的结果 for loop 1 offset loop 2 offset 2 loop 1 gt offset 190 loop 2 lt 190
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi
  • C 中什么函数可以替换字符串中的子字符串?

    给定一个 char 字符串 我想查找所有出现的子字符串并将其替换为备用字符串 我没有看到任何简单的函数可以实现这一点
  • double 类型的静态类成员的常量表达式初始值设定项

    在 C 11 和 C 14 中 为什么我需要constexpr在下面的代码片段中 class Foo static constexpr double X 0 75 而这会产生编译器错误 class Foo static const doub
  • 将小数格式化为两位或整数

    对于 10 我想要 10 而不是 10 00 对于 10 11 我想要 10 11 没有代码可以实现吗 即通过指定格式字符串类似于 0 N2 decimal num 10 11M Console WriteLine num ToString
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati

随机推荐

  • 如何在 MySQL 中使用 SELECT 删除填充的 NULL 字节

    如果以这种方式插入数据 insert into t date data values now lpad Hello 4096 CHAR 0x00 如何检索它并从中删除 NULL 字符data柱子 事实上 我正在寻找与什么相反的东西LPAD
  • 用于加载 Ionic / Cordova 应用程序外部的外部链接

    我正在开发一个 Ionic Cordova 应用程序 在其中加载有时包含外部链接的提要和新闻 我需要在应用程序外部加载这些外部链接 而不是在 InAppBrowser 中 而是在手机浏览器中 是否可以将此作为所有链接的默认行为 为了使用相应
  • 无法在 eclipse 中创建 Maven 项目

    我在企业防火墙后面的 Windows 7 计算机上安装了 Eclipse Luna 和 Maven 3 2 3 尝试从原型创建项目会导致以下错误 无法从任何配置的存储库解析原型 org apache maven archetypes mav
  • Lucene 中的关键字(OR、AND)搜索

    我在我的门户 基于 J2EE 中使用 Lucene 来提供索引和搜索服务 问题出在Lucene的关键字上 当您在搜索查询中使用其中之一时 您会收到错误消息 例如 searchTerms ik OR jij 这工作正常 因为它会搜索 ik o
  • 从 JSON 中插入 HTML 选择标签选项

    所以 事情是这样的 我有一个 JSON 对象保存在我的 web 应用程序的 localStorage 中 此 JSON 被保存为字符串 其中JSON stringify 在我的函数之一内 在页面加载上 localStorage setIte
  • socket.io的emit函数中允许使用数组吗?

    是否可以发送对象数组socket io发出函数 例如 io emit message data 123 data 456 Yes it is 您可以发送几乎任何类型 并且可以将任何类型嵌套在另一种类型中 Strings Numbers 12
  • 为什么匿名类型实例不能接受实体框架查询返回的空值?

    当我尝试运行以下实体框架查询时 var l from s in db Samples let action db Actions Where x gt s SampleID x SampleID x ActionTypeID 1 First
  • 如何存储/计算单个簇大小并在 NetLogo 中绘制它们

    我有一个生成黄色斑块簇的模型 我有兴趣查看簇大小的频率分布 为此 我从 NetLogo 代码库中的 补丁集群示例 中选择了代码 它似乎在查找簇方面起作用 参见下面的照片 尽管我希望它不计算簇中的绿色斑块 但我不知道如何获取大小 或斑块计数
  • 关于 printf 语句的混淆

    所以我正在运行这段代码 include
  • Android:使用 Gradle 构建,使用 Maven 签名

    我的 Android 构建在持续集成中运行良好 但 androidSigning 除外 Gradle 可以允许开发人员清晰地捕获密钥库路径和密码 这并不令人满意 1 你有解决方法吗 比如密码加密 2 我现在的想法是使用 Gradle 进行构
  • 自动递增第二列[重复]

    这个问题在这里已经有答案了 我有一个有 2 列的表 ID 列自动递增 我正在尝试自动增加与 ID 相同的用户列id列 但带有 user 前缀 例如 user100 其中 ID 也是 100 基本上就像 stackoverflow 上所做的那
  • 具有拉伸对齐功能的 Flexbox 容器中垂直居中的 div

    我需要将一个 div 放在 Flex 容器中 并保持该 div 的整个容器的高度 显然 我有align items stretch用于保持高度或align items center用于定心块 Flexbox 模型将 div 居中并保持父容器
  • 在 React 中切换类

    我正在将 React 用于一个有菜单按钮的项目 a href i i a 还有一个 Sidenav 组件 例如
  • 2 个纬度/经度点(坐标)列表之间的地理/地理空间距离

    我有 2 个列表 list1 list2 以及各个地点的纬度 经度 一份清单 list2 的地点名称list1不具有 我也想要 list1 中每个点的近似位置 所以我想指出一点list1 尝试寻找最近的点list2并采取该地点 我对其中的每
  • 将 .class 转换为 .java

    我有一些 class 文件需要转换为 java 所以我这样做了 javap c ClassName class 我一直有同样的错误 ERROR Could not find ClassName class 你们知道可能是什么原因吗 我做了
  • GPUImage iOS 中未显示文本叠加

    我正在尝试在视频上叠加一些文本 但到目前为止还没有取得任何成功 videoCamera GPUImageStillCamera alloc initWithSessionPreset AVCaptureSessionPreset640x48
  • 如何解决一般错误:2006 MySQL 服务器已消失

    我正在执行一项操作 将数百条记录插入 MySQL 数据库 插入 176 条记录后 我收到此错误 PDOException SQLSTATE HY000 一般错误 2006 MySQL 服务器已消失 我有什么办法可以解决这个问题吗 该过程是使
  • 如何在Java中对ArrayList进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为 水果 的课程 我正在创建此类的列表 并将每种水果添加到列表中 我想根据水果名称的顺序对这个列表进行排序 public class Fruit private String fruitName pri
  • 在模型中的belongs_to中使用委托时出现“未初始化常量”错误

    我正在使用三个表的模型实现一个视图 其中一个是连接表 以下是表格 Recipe class Recipe lt ActiveRecord Base validates name presence gt true validates dire
  • 如何正确重复使用卷曲手柄

    我想正确地重用卷曲句柄 这样它就不会给我错误并正常运行 假设我有这段代码 CURL curl curl global init CURL GLOBAL ALL curl curl easy init curl easy setopt cur