【问题标题】:LibCurl seems to escape my POSTFIELDSLibCurl 似乎逃脱了我的 POSTFIELDS
【发布时间】:2014-12-16 18:17:15
【问题描述】:

我正在使用此代码将 json 发布到服务器:

但似乎 CURL 以某种方式转义了数据,即将其转换为 "{\"email\":\"test@example.se\"}" (使我的引号转义)。 我认为 curl 仍然使用 Content-Type "application/x-www-form-urlencoded" 发布,即使你在我的标题中用 application/json 覆盖了它。 我怎样才能让 curl 不这样做?

curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_POST, 1L);
const std::string& data = "{\"email\":\"test@example.se\"}";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str() );
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, data.size() );
// Headers
curl_easy_setopt(headers, "Content-Type: application/json");
curl_easy_setopt(headers, "Authorization: Basic: something:something");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_perform(curl);

【问题讨论】:

  • libcurl 根本没有代码可以转义或转换该数据!
  • @DanielStenberg 考虑一下我认为服务器可能需要utf8而不是ansi。我明天上班先试试。

标签: c++ post curl


【解决方案1】:

从这里:http://curl.haxx.se/libcurl/c/CURLOPT_POSTFIELDS.html

libcurl 不会以任何方式为您转换或编码它。

库不复制指向的数据:因此,调用应用程序必须保留它,直到相关的传输完成。

您确定遵守这些通知吗?

【讨论】:

  • 是的,所有这些通知都得到遵守。
  • 能否在创建后立即检查字符串,看它是否包含反斜杠。也许编译器正在这样做?
  • 检查过,它不包含任何反斜杠。我认为问题在于 CURL 的编码在某处。
  • 也许是接收端添加它们的东西?
猜你喜欢
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 2012-02-11
  • 2019-06-22
相关资源
最近更新 更多