尝试使用libcurl添加标题时出现分段错误

时间:2019-01-08 16:26:57

标签: curl libcurl

我在C语言中使用LIBCURL访问需要令牌的服务器。我已经成功收到令牌,但是在使用s_list_append();尝试附加任何标题/文本时遇到分段错误。

下面是我的代码:需要注意的一件事是,我的第一个函数“ get_token”不返回任何内容,我只是用它来解析数据并获取保存到全局令牌中的令牌。

代码在以下行失败:headers = curl_slist_append(headers,“ Accept:application / json”);

CURL *curl;
struct curl_slist *headers = NULL;
char unamepass[] = "grant_type=password&username=uname&password=pass";
char url[] = "http://url1";
char url2[] = "http://url2";
char auth[256];
CURLcode res;

printf("Running...\n");
curl = curl_easy_init();

if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, url);
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, unamepass);
  curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(unamepass));
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, get_token);
  res = curl_easy_perform(curl);
  if(res != CURLE_OK)
    fprintf(stderr, "curl_easy_perform() failed: %s\n",
            curl_easy_strerror(res));

  sprintf(auth, "Authorization: Bearer %s", token);
  headers = curl_slist_append(headers, "Accept: application/json");
  headers = curl_slist_append(headers, auth);
  curl_easy_setopt(curl, CURLOPT_HTTPGET,1L);
  curl_easy_setopt(curl, CURLOPT_URL, url2);
  curl_easy_setopt(curl, CURLOPT_HEADER, 1);
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
  res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);

我肯定会收到令牌,但是在运行第一次执行后,确实收到错误消息:“无法将数据写入应用程序/光盘”。但是由于获得了令牌,所以我决定继续前进,在这种情况下,我在第一个s_list_append函数中遇到了错误。有人知道吗?

Edit1:我不再遇到“无法写入...”错误,因为我现在可以在第一个回调中正确返回数据的大小。但是,我仍然在curl_slist_append()行上遇到段错误。

Edit2:除了初始化另一个curl(curl2)或清理原始的curl外,我对库执行的任何其他调用(例如curl_slist_append或SET_OPT)都会引发segfault,因此它不仅是append函数。

Edit3:已解决:我傲慢地认为令牌长度为512,事实证明它接近1000,因此通过用sprintf覆盖内存空间,我覆盖了其他导致段错误的分配内存。不是libcurl问题

0 个答案:

没有答案