我目前正在用 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+VF1 GVRcQmYDvVoW5JHiejMjnrVNnIMpmU35y0mzywZLYn1XUL9NhFHLTAGfxsttiTmZOLY7dgCBWTPng==&mode=0
。它是一些参数作为键/值对。 Data
这里是 base64 编码的。
但是当我执行 curl_perform() 时,data
的值不一样。所有的 +
都被空格替换了。所以 PHP base64_decode($_POST['data'], true);
函数返回 false
。
我尝试通过不同的方式来避免它在 C++ 端出现,但没有任何效果。
最佳答案
您需要正确转义您的 URL,加号会被解释为空格(请参阅 link)。
一些可能有用的链接:
请务必单独转义每个参数,否则您的 ?
、&
和 =
字符(在这些位置有效)可能会也被替换了。
另请注意,curl_easy_escape 分配了一个需要由 curl_free 释放的新字符串为了避免内存泄漏。
关于c++ - '+' 替换为空格 Curl C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757537/