- 下載失敗導致cad崩潰,報錯’Error handler re-entered.Exiting now ',原因是因為我將libcurl相關的功能繼承到一個類中,在類中進行相關的webapi交互,但是由于最開始進行了請求所以沒有將curl進行初始化導致的傳遞數據錯誤.只需要在函數開始時進行初始化即可.
curl = curl_easy_init();
/*curl_global_init(CURL_GLOBAL_DEFAULT);*/
if (curl)
{MessageBoxA(NULL, combinePath.c_str(), "0", 0);FILE* fp = fopen(strFileName.c_str(), "wb"); // 打開文件,準備寫入curl_easy_setopt(curl, CURLOPT_URL, combinePath.c_str());curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWriteFunction);CURLcode result = curl_easy_perform(curl);acutPrintf(L"download : %i", result);fclose(fp); // 關閉文件/*curl_easy_cleanup(curl);*/
}
- 請求webapi數據,發現接口無響應,并且單獨測試傳入字符串沒有影響.原因是因為,我的測試文件是英文字符,導致忽略了將其編碼傳入導致的,而一直測試忽視了這方面,所以解決這個問題需要將中文字符編碼之后傳入header即可解決.
std::wstring_convert<codecvt_utf8<wchar_t>> converter;//std::wstring wideStr = L"專篇模板";
std::wstring wideStr = ConvertToWideString(Filepath);
// 轉換為 UTF-8 編碼
std::string utf8Str = converter.to_bytes(wideStr);// 進行 URL 編碼
char* encodedData = curl_easy_escape(curl, utf8Str.c_str(), utf8Str.length());
std::string encodedSymbolName(encodedData);
curl_free(encodedData);
urlencode函數
std::string webApi::UrlEncode(const std::string& str)
{std::string strTemp = "";size_t length = str.length();for (size_t i = 0; i < length; i++){if (isalnum((unsigned char)str[i]) ||(str[i] == '-') ||(str[i] == '_') ||(str[i] == '.') ||(str[i] == '~'))strTemp += str[i];else if (str[i] == ' ')strTemp += "+";else{strTemp += '%';strTemp += ToHex((unsigned char)str[i] >> 4);strTemp += ToHex((unsigned char)str[i] % 16);}}return strTemp;}