c++ 访问http 获得 content-Type:image/png 类型的返回信息并保存为base64字符串 不使用libb64
时间: 2024-04-05 22:36:01 浏览: 53
首先,你需要使用C++中的网络编程库,例如libcurl。这个库可以让你轻松地访问HTTP资源。
以下是一份示例代码,可以获取一个PNG图像的base64编码字符串:
```c++
#include <curl/curl.h>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
// 回调函数,用于处理HTTP响应内容
static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
// 将一个字符串编码为base64字符串
std::string base64_encode(const std::string& in) {
std::string out;
std::vector<int> T(256, -1);
for (int i = 0; i < 64; i++) {
T["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[i]] = i;
}
int val = 0, valb = -6;
for (unsigned char c : in) {
val = (val << 8) + c;
valb += 8;
while (valb >= 0) {
out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(val >> valb) & 0x3F]);
valb -= 6;
}
}
if (valb > -6) {
out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[((val << 8) >> (valb + 8)) & 0x3F]);
}
while (out.size() % 4) {
out.push_back('=');
}
return out;
}
int main() {
CURL* curl;
CURLcode res;
std::string buffer;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/image.png");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
} else {
// 打印HTTP响应内容的Content-Type头
char* content_type;
curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &content_type);
std::cout << "Content-Type: " << content_type << std::endl;
// 将PNG图像编码为base64字符串
std::string base64_image = base64_encode(buffer);
std::cout << "Base64-encoded image: " << base64_image << std::endl;
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
```
注意,这个例子中使用了一个简单的base64编码函数。在实际使用中,你可能需要使用更高效和更安全的base64编码库。
阅读全文