c libcurl CURLOPT_POSTFIELDS奇怪的错误

时间:2015-01-16 17:53:30

标签: c

我是一个非常新的开发人员,我对libcurl有点麻烦。我之前在网上搜索了很多但是我没有找到适合我的答案。

这是纯粹的c,没有++。

我有这段代码,请求失败

char * write_url(MyData data)
{
  char *field = malloc(20 * sizeof(char));

  if (strcmp(data.sensorName,"Temperature")==0){
      sprintf(field,"&temperature=%.2f",data.measure);
   }

  CURL *curl;
  curl_global_init(CURL_GLOBAL_ALL);
  curl = curl_easy_init();
  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/");
  curl_easy_setopt(curl, CURLOPT_POST, 1);

  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, field);
  curl_easy_perform(curl);
  curl_easy_cleanup(curl);
}

但如果我改变

  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, field);

char *data="&temperature=20"; 
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);

它正在运作。 但我希望通过该功能传递数据!

谢谢!

1 个答案:

答案 0 :(得分:0)

malloc()不会初始化内存,因此你必须这样做。但如果没有采用if语句,则内存仍然未初始化。在代码的else部分执行此操作:

if (strcmp(data.sensorName,"Temperature")==0)
{
     sprintf(field,"&temperature=%.2f",data.measure);
}
else
{
    strcmp(field,"Unknown") ;
}

完成后释放内存:

free(field) ;

另请注意,libcurl调用始终返回错误值,请使用它。

curl = curl_easy_init();    //no error checking is perform in your code
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/");
curl_easy_setopt(curl, CURLOPT_POST, 1);