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

时间:2017-05-03 10:31:19

标签: c++ curl base64 http-post

我目前正在处理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。它是键/值对的一些参数。 Data这里是base64编码的。

但是当我执行curl_perform()时,data的值并不相同。所有+都被空格所取代。所以PHP base64_decode($_POST['data'], true);函数返回false

我尝试了不同的方法来避免C ++方面,但没有任何作用。

1 个答案:

答案 0 :(得分:4)

您需要正确转义您的网址,并且标记会被解释为空格(请参阅link)。

一些可能有用的链接:

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

另请注意,curl_easy_escape会分配一个新字符串,该字符串需要curl_free免费提供,以避免内存泄漏。