【问题标题】:catching exceptions in C/C++ while using cURL lib在使用 cURL lib 时在 C/C++ 中捕获异常
【发布时间】:2012-01-30 22:50:39
【问题描述】:

我正在开发一个 C++ 程序,它使用 cURL 库,它是用纯 C 语言编写的。 当我尝试使用 cURL 句柄连接到不正确的 URL 地址时,我得到了这样的异常:

terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_S_construct NULL not valid

我的程序终止,而不是跳过这个 URL 并继续前进。 这是我的代码的 sn-p:

CURL* curl;
curl_easy_setopt( curl, CURLOPT_URL, "incorrect URL" );

curl_easy_perform( curl ); // this method throws the expection

我试着这样处理:

try{
   curl_easy_perform( curl ); 
} catch { std::logic_error &e){
    return -1; // skip this URL and go futher
}

但程序仍然终止,似乎没有正确处理异常。

包含文件“stdexcept”。

有没有人知道更多关于这个错误以及如何正确捕获这个异常以便我的程序可以继续工作的信息?

【问题讨论】:

  • 附加调试器并在抛出异常时发布堆栈跟踪。
  • 您是否检查过curl_easy_setopt() 是否是引发异常的那个而不是curl_easy_perform()
  • 不,我没有。好点子。我会在除夕晚会回来后检查它并发布结果。
  • 我检查过了,setopt 一切正常。我已经在另一个主题中发布了整个代码,这是链接:stackoverflow.com/questions/8696201/…

标签: c++ exception curl


【解决方案1】:

我不是 libcurl 专家,但在调用接下来的两个 curl 函数之前,您不需要将 curl_easy_init() 的结果分配给您的 curl 变量吗?

ETA,以下代码不会为我抛出异常。 curl_easy_perform 返回的是CURLE_COULDNT_RESOLVE_HOST (6)

#include <curl/curl.h>
#include <iostream>
int main()
{
    CURL* curl = curl_easy_init();
    std::cout << curl_easy_setopt(curl, CURLOPT_URL, "incorrect URL") << std::endl;
    std::cout << curl_easy_perform(curl) <<std::endl;
}

【讨论】:

  • 你当然需要这样做。我用整个方法创建了类似的主题,大约有 50 行代码,没有人回答。因此,我决定以这样的较短形式发布它。 libcurl 的所有内容都已正确设置我的意思是,如果我使用正确的 URL 调用 curl_easy_perfom,我会得到该页面并做一些与之相关的事情。我只是不知道如何捕捉那个异常..
  • 我知道没有得到另一个问题的答案令人沮丧,但是当您发布无法工作的代码时,您会得到像我这样的 cmets(这里 curl 是一个未初始化的指针值)。您能否将其归结为最简单的示例,该示例显示您的实际代码遇到的相同异常? FWIW 异常似乎是尝试使用 NULL 字符指针初始化 std::string 。由于 libcurl 不(AFAIK)使用任何 C++ 字符串对象,因此可能会发生其他事情。
  • 你对那个字符串错误是正确的——这不是 cURL 的错。连接失败后,我试图将 null ( no connection = no document fetched ) 分配给一个字符串,这应该是这个方法的结果。这就是 logic_error 的情况,我已经修复了它,但我仍然从 cURL 得到无法解决主机错误。我在另一个主题中发布了整个代码:stackoverflow.com/questions/8696201/…
猜你喜欢
  • 2020-11-20
  • 2011-03-20
  • 2011-07-02
  • 2012-08-10
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多