Пример выполнения асинхронного http get-запроса с использованием cpp-netlib

Я пытаюсь сделать асинхронные HTTP-запросы с помощью CPP-Netlib. Я не смог найти никаких примеров этого в документации, в результате даже не смог его скомпилировать. Моя текущая попытка ниже (с ошибками компиляции в комментариях). Любые намеки, как заставить это работать? Заранее спасибо!

#include <iostream>
#include <boost/network/protocol/http/client.hpp>

using namespace std;
using namespace boost::network;
using namespace boost::network::http;

typedef function<void(boost::iterator_range<char const *> const &, boost::system::error_code const &)> body_callback_function_type; // ERROR: Expected initializer before '<' token

body_callback_function_type callback() // ERROR: 'body_callback_function_type' does not name a type
{
cout << "This is my callback" << endl;
}

int main() {
http::client client;
http::client::request request("http://www.google.com/");
http::client::response response = client.get(request, http::_body_handler=callback()); // ERROR: 'callback' was not declared in this scope
cout << body(response) << endl;
return 0;
}

4

Решение

Я не использовал cpp-netlib, но похоже, что есть некоторые очевидные проблемы с вашим кодом:

Первая ошибка отсутствует boost:: на функцию typedef.

typedef function<void(boost::iterator_range<char const *> const &, boost::system::error_code const &)> body_callback_function_type; // ERROR: Expected initializer before '<' token

Должно быть

typedef boost::function<void(boost::iterator_range<char const *> const &, boost::system::error_code const &)> body_callback_function_type;

Вторая ошибка:

body_callback_function_type callback()
{
cout << "This is my callback" << endl;
}

Должна быть правильная функция:

void callback( boost::iterator_range<char const *> const &, boost::system::error_code const &)
{
cout << "This is my callback" << endl;
}

Третья ошибка заключается в том, что вы должны передать обратный вызов, а не вызывать его:

http::client::response response = client.get(request, http::_body_handler=callback());

Должно быть

http::client::response response = client.get(request, callback);

Надеюсь, на этом все (или достаточно, чтобы вы начали).

3

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

Других решений пока нет …

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