Pthreads& Libcurl - 使用授权标头

时间:2017-12-17 04:29:28

标签: c++ segmentation-fault pthreads libcurl

过去3天我一直在撕扯我的头发,试图找出我的C ++代码输出“分段错误”的原因。不熟悉C ++并没有帮助。使用pthreads也没有帮助缩小问题范围(如果你无法复制这个,我想用pthreads试试吧)

但是现在,我相信我终于明白了其中一个原因。这是代码:

static void* pull_one_url(void* arguments)
{

  struct example_struct args = *((struct example_struct *)arguments);

  CURL *curl;
  curl = curl_easy_init();
  curl_easy_setopt(curl, CURLOPT_URL, ("https://example.com/" + (args).appendData).c_str());
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 30000L);

  // Set Headers
  struct curl_slist *header = NULL;
  header = curl_slist_append(header, ("Authorization: Bearer " + (args).myBearerToken).c_str());    
  header = curl_slist_append(header, "User-Agent: MyCPPApp");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header);
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);

  CURLcode res = curl_easy_perform(curl);
  cout << "Request sent." << endl;


  return NULL;
}

在我的情况下运行该代码将引发“分段错误”并使应用程序崩溃。使用任何授权承载令牌似乎都可以。

我的问题是 - 如何绕过分段错误?毫无疑问,我的应用程序会遇到错误的身份验证令牌,我不希望它崩溃,因为这样,特别是考虑到它是多线程的并且需要继续它的工作。

这种情况可能会发生,因为我正在从呈现的pthread参数中传递令牌,但是当我找到另一种方法时,我感到很茫然,所以如果是这样,请告诉我正确的方向。

哦,顺便说一下,如果你知道一种方法可以在线程完成请求后立即安全轻松地将输出打印到控制台(它是多线程的,无需等待所有线程死掉),那么请帮忙我也是这样。我不是100%肯定我现在使用的代码是安全的,这些可怕的分段错误似乎困扰着我,所以我把它排除在我的测试和这篇文章之外。

0 个答案:

没有答案