@Junior007

Почему веб-клиент не подключается к Https?

Осваиваю Boost::Asio.

Взял стандартный пример из Boost, выводит содержимое сайта в консоль все работает, но если у сайта стоит Https кидает 302 ошибку :(
Буду рад любым подсказкам!

int main()
{
	setlocale(LC_ALL, "Russian");
	try
	{
		char* argv[3];

		argv[0] = "sync_client";
		argv[1] = "yandex.ru";
		argv[2] = "";

		boost::asio::io_service io_service;

		//Формирование конечной точки
		tcp::resolver resolver(io_service);
		tcp::resolver::query query(argv[1], "80");
		tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

		//Создание сокета и подключение к адресу
		tcp::socket socket(io_service);
		boost::asio::connect(socket, endpoint_iterator);

		//Формирование заголовков запроса
		boost::asio::streambuf request;
		std::ostream request_stream(&request);
		request_stream << "GET " << argv[2] << " HTTP/1.1\r\n";
		request_stream << "Host: " << argv[1] << "\r\n";
		request_stream << "User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:49.0) Gecko/20100101 Firefox/49.0";
		request_stream << "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
		request_stream << "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";
		request_stream << "Accept-Encoding: gzip, deflate, br";
		request_stream << "Connection: keep-alive\r\n\r\n";

		//Сонхронная запись в поток
		boost::asio::write(socket, request);

		//Прочесть поток пока не будет встречен разделитель "\r\n"
		boost::asio::streambuf response;
		boost::asio::read_until(socket, response, "\r\n");

		std::istream response_stream(&response);
		std::string http_version;
		response_stream >> http_version;
		unsigned int status_code;
		response_stream >> status_code;
		std::string status_message;
		std::getline(response_stream, status_message);
		if (!response_stream || http_version.substr(0, 5) != "HTTP/")
		{
			std::cout << "Invalid response\n";
			//return 1;
		}
		if (status_code != 200)
		{
			std::cout << "Response returned with status code " << status_code << "\n";
			//return 1;
		}

		//Прочесть поток пока не будет встречен разделитель "\r\n\r\n"
		boost::asio::read_until(socket, response, "\r\n\r\n");

		//Вывести заголовки ответа сервера
		std::string header;
		while (std::getline(response_stream, header) && header != "\r")
			std::cout << header << "\n";

		boost::system::error_code error;

		//Вывести тело ответа сервера
		while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error))
			std::cout << &response;

		if (error != boost::asio::error::eof)
			throw boost::system::system_error(error);
	}
	catch (std::exception& e)
	{
		std::cout << "Exception: " << e.what() << "\n";
	}

	std::system("pause");

	return 0;
}
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
15432
@15432
Системный программист ^_^
Это не ошибка, просто сайт перенаправляет вас на HTTPS версию. Некоторые сайты не позволяют работать по HTTP, насильно включая HTTPS таким образом
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы