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

'+' replaced by spaces Curl C++

我目前正在用 C++ 处理 HTTP POST 请求,我遇到了一个错误。当我用 :

设置我的 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。它是一些 Key/Value 对的参数。 Data这里是base64编码的。

但是当我执行curl_perform()时,data的值是不一样的。所有 + 都被空格替换了。所以 PHP base64_decode($_POST['data'], true); 函数 return false.

我尝试了不同的方法来避免它在 C++ 端出现,但没有任何效果。

您需要正确转义 URL,加号被解释为空格(参见 link)。

一些可能有用的链接:

一定要单独转义每个参数,否则您的 ?&= 字符(在这些位置有效)也可能会被替换。

另请注意,curl_easy_escape 分配了一个新字符串,需要由 curl_free 释放,以避免内存泄漏。