'+'替换为空格 Curl C++

'+' replaced by spaces Curl C++

本文关键字:Curl C++ 空格 替换      更新时间:2023-10-16

我目前正在处理C 中的HTTP POST请求,并且我遇到了一个错误。当我将帖子数据设置为

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata.c_str());

postdata.c_str()等于:

cpp=1&data=zJBnu/hyK+xgm1tUOM22bL9h/9BVdqss7uc5uLHJ65lLHSTzQCSdgA36cz0/xb3juGGtSjm8P9m+4Ee6B6ot4IxMhuJBH5x3Co6L35tZRg7BhxTWO29UMtgitEo/OPBSiRVX/doZwlNBPm3v8ZRgjH8PT/W/VajqZYGvIvwK1cgBdrTeRCLE1nkEdQ2O0lg00VCU2amSBc4faty/RtTZYflpc+PQl9YKvsC+F09uZVKHORKfJPnIxg1SLUSuXNfzItJOR+VF1GVRcQmYDvVoW5JHiejMjnrVNnIMpmU35y0mzywZLYn1XUL9NhFHLTAGfxsttiTmZOLY7dgCBWTPng==&mode=0。它是键/值对的一些参数。Data这里是基本64编码。

但是当我进行curl_perform((时, data的值不一样。所有+都被空间所取代。因此,PHP base64_decode($_POST['data'], true);功能返回false

我以不同的方式避免了C 一侧,但没有任何作用。

您需要正确逃脱URL,加上符号被解释为空格(请参阅链接(。

一些可能有帮助的链接:

  • stackoverflow:编码/解码URLC
  • libcurl:curl_easy_escape

请确保单独逃脱每个参数,否则您的?&=字符(在这些位置上是有效的(可能会被替换。

还要注意,curl_easy_escape分配了一个新的字符串,需要通过curl_free释放,以避免内存泄漏。