Проблема с символом перевода строки в libcurl (curlpp)

В настоящее время я использую 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 ();

2

Решение

То, как вы читаете файл ключа, будет сбрасывать все в ваш 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;
0

Другие решения


По вопросам рекламы [email protected]