В настоящее время я использую curlpp для выполнения HTTP-запроса, но curlpp сообщает, что в URL есть недопустимые символы. Я сузил проблему URL до переменной, которая читается из файла конфигурации (одна строка, она просто содержит необходимую информацию). Еще одна странная вещь заключается в том, что это происходит только при установке Fedora x64bits (я не пробовал другие дистрибутивы x64bit). На двух моих машинах для разработки он отлично работает (Ubuntu и OpenSuse, 32 бита). Я попытался напечатать ASCII-код символов, прочитанных из файла, и все выглядит совершенно нормально, однако в конце строки есть символ перевода строки. Теперь этот символ встречается во всех системах, но в системе Fedora он считается незаконным. Замена этого символа нулевым символом завершения делает программу снова идеальной.
Мне было интересно, если есть возможность заставить curlpp игнорировать символ перевода строки. Я также попытался экранировать строку с помощью функции curl_easy_escape, но она преобразует символ перевода строки в кодировку процента% 0A. Это, в свою очередь, не распознается сервером HTTP как существующий URL-адрес (выводится ошибка 404).
Кто-нибудь сталкивался с этой проблемой раньше? Можно ли игнорировать этот символ, или это лучший способ просто заменить его?
Заранее спасибо за помощь!
С наилучшими пожеланиями,
PS: Во всех системах версии библиотек одинаковы (что несколько странно). Версия curlpp (0.7.3)
РЕДАКТИРОВАТЬ: В связи с популярным спросом я публикую код, который читает переменную из файла.
std::ifstream keyfile (pathToFile.c_str());
std::stringstream buffer;
buffer << keyfile.rdbuf ();
То, как вы читаете файл ключа, будет сбрасывать все в ваш std::stringstream
включая символ конца строки.
Одна вещь, которую вы можете сделать, это использовать >>
который прочитает первое целое слово, которое он найдет, пропуская первые пробелы:
std::ifstream keyfile(pathToFile.c_str());
std::string api_key;
// will skip leading spaces and only read up to the next space
// or end of line
keyfile >> api_key;