'+' 替换为空格 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 释放,以避免内存泄漏。
我目前正在用 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 释放,以避免内存泄漏。