HTTP Client library for C++

前端 未结 4 614
我在风中等你
我在风中等你 2021-01-03 05:42

I\'m trying to write milt-threaded HTTP proxy for learning C++/socket/HTTP

I\'m looking for a HTTP client library like HttpURLConnection available in Java.

相关标签:
4条回答
  • 2021-01-03 06:24

    libcurl docs have an example page on how to get incremental download callbacks (into a memory buffer) as data streams in from a request:

    http://curl.haxx.se/libcurl/c/getinmemory.html

    In your case, you would just forward the data buffer on to the client that originally made the request.

    0 讨论(0)
  • 2021-01-03 06:30

    Microsoft released "cpprestsdk" a modern, cross-platform, asynchronous rest client / server with json serialization / deserialization support. https://github.com/microsoft/cpprestsdk

    0 讨论(0)
  • 2021-01-03 06:33

    You can try cpp-netlib

    0 讨论(0)
  • Beast is an open source C++ library which supports the functionality you desire. It has a "Writer" concept which supports suspending and resuming, incremental rendering of the body, and coroutines: http://vinniefalco.github.io/beast/beast/types/Writer.html

    The library is here: http://vinniefalco.github.io/

    Here's a complete example program:

    #include <beast/http.hpp>
    #include <boost/asio.hpp>
    #include <iostream>
    #include <string>
    
    int main()
    {
        // Normal boost::asio setup
        std::string const host = "boost.org";
        boost::asio::io_service ios;
        boost::asio::ip::tcp::resolver r(ios);
        boost::asio::ip::tcp::socket sock(ios);
        boost::asio::connect(sock,
            r.resolve(boost::asio::ip::tcp::resolver::query{host, "http"}));
    
        // Send HTTP request using beast
        beast::http::request_v1<beast::http::empty_body> req;
        req.method = "GET";
        req.url = "/";
        req.version = 11;
        req.headers.replace("Host", host + ":" + std::to_string(sock.remote_endpoint().port()));
        req.headers.replace("User-Agent", "Beast");
        beast::http::prepare(req);
        beast::http::write(sock, req);
    
        // Receive and print HTTP response using beast
        beast::streambuf sb;
        beast::http::response_v1<beast::http::streambuf_body> resp;
        beast::http::read(sock, sb, resp);
        std::cout << resp;
    }
    
    0 讨论(0)
提交回复
热议问题