在使用ASIO库进行HTTPS请求并获得响应正文时,可能会遇到正文包含非法Unicode字符的情况。这可能是由于服务器响应中包含了某些不能直接打印的非ASCII字符(如二进制数据等)。
要解决这个问题,可以使用库中的base64编码/解码方法将响应正文进行编码/解码。以下是示例代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace boost::asio;
using namespace boost::asio::ip;
using namespace boost::asio::ssl;
// base64编码
std::string base64_encode(const std::string& s) {
std::string result;
static const char* lookup_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int val = 0, valb = -6;
for (char c : s) {
val = (val << 8) + c;
valb += 8;
while (valb >= 0) {
result.push_back(lookup_table[(val >> valb) & 0x3F]);
valb -= 6;
}
}
if (valb > -6)
result.push_back(lookup_table[((val << 8) >> (valb + 8)) & 0x3F]);
while (result.size() % 4)
result.push_back('=');
return result;
}
// base64解码
std::string base64_decode(const std::string& s) {
static const char* lookup_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
std::vector decoding(256, -1);
for (int i = 0; i < 64; i++) {
decoding[lookup_table[i
上一篇:asio和“流媒体服务器”
下一篇:ASIO计时器取消和生命周期问题