В нижеприведённом коде я пытаюсь отправить запрос к GoogleSearchAPI через cURL. Строка запроса (url) содержит кириллические символы, которые при отправке непонятно как кодируются, и ни Fiddler ни GoogleAPI не могут понять что это. Как бороться с такой проблемой?
#include <string>
#include <Windows.h>
#include <clocale>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
CURL *curl = curl_easy_init();
string question = "привет";
string url = "https://www.googleapis.com/customsearch/v1?q=" + question;
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_PROXY, "http://192.167.1.106:8888/");
curl_easy_perform(curl);
curl_easy_cleanup(curl);
return 0;
}
Fiddler видит этот запрос так:
В url допустим лишь ограниченный набор символов (a-z
, A-Z
, 0-9
, -
, .
, _
, ~
), все остальные символы должны быть закодированы т.н. url-encoding кодировкой. Для этого можно использовать функцию curl_easy_escape.
Далее, сервис который будет парсить url на той стороне, должен понимать кодировку в которой изначально был текст. Обычно сервис ожидает какую-то конкретную кодировку. И скорее всего, это будет UTF-8. У вас же текст в Windows-1251. Соответственно, предварительно вам нужно перекодировать текст в utf-8.
#include <locale>
#include <codecvt>
std::string to_utf8(const std::wstring &str)
{
static std::wstring_convert<std::codecvt_utf8<wchar_t>> u8;
return u8.to_bytes(str);
}
string s = to_utf8(L"привет");
char *question = curl_easy_escape(curl, s.c_str(), 0);
if (question) {
...
curl_free(question);
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите, что может выбить такое исключение?
у меня много вопросов по поводу QThread и потоковУ меня есть класс ClassData, который в конструкторе принимает два массива данных, затем передает...
На VDS лежит самописная программка (на С++), при запуске исполняемого бинарника из под root - работает корректноСтоит зайти за другого пользователя...
Пытаюсь реализовать БПФ из Mathcad в проекте на Qt c++ Неполучается интерпретировать данную формулу