user: How to make a HTTP request in C++ code, give me 2 examples using pure C++ and using external library, which is more efficient?

assistant: Making an HTTP request in C++ code can be done either using pure C++ or by using an external library. Using pure C++, you can use the boost library to make an HTTP request, which is a well-known library for C++. Here is an example of how to use the boost library to make an HTTP request:

#include <boost/asio.hpp>
#include <iostream>

using namespace boost::asio;

int main()
{
    io_context io_context;

    ip::tcp::resolver resolver(io_context);
    ip::tcp::resolver::query query("www.example.com", "http");
    ip::tcp::resolver::iterator iter = resolver.resolve(query);

    ip::tcp::socket socket(io_context);
    connect(socket, iter);

    std::string request = "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n";
    write(socket, buffer(request));

    boost::asio::streambuf response;
    boost::asio::read_until(socket, response, "\r\n");

    std::cout << &response;

    return 0;
}

Alternatively, you can use an external library such as cURL to make an HTTP request. Here is an example of how to use cURL to make an HTTP request:

#include <curl/curl.h>

int main(void)
{
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");

        /* Perform the request, res will get the return code */ 
        res = curl_easy_perform(curl);
        /* Check for errors */ 
        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));

        /* always cleanup */ 
        curl_easy_cleanup(curleasycleanup(curl); 
        }

        return 0; 
}

user: Great, change the examples to do a GET request from https://open-assistant.io/tasks/random

assistant: Sure, I have changed the URL in the code to http://open-assistant.io/tasks/random. Note that this will not necessarily work, depending on how the website is configured. For example, the website may require particular user agents. 
```cpp
#include <boost/asio.hpp>
#include <iostream>

using namespace boost::asio;

int main()
{
    io_context io_context;

    ip::tcp::resolver resolver(io_context);
    ip::tcp::resolver::query query("open-assistant.io/tasks/random", "http");
    ip::tcp::resolver::iterator iter = resolver.resolve(query);

    ip::tcp::socket socket(io_context);
    connect(socket, iter);

    std::string request = "GET / HTTP/1.1\r\nHost: open-assistant.io\r\nRefferer:http://open-assistant.io/tasks/random\r\n";
    write(socket, buffer(request));

    boost::asio::streambuf response;
    boost::asio::read_until(socket, response, "\r\n");

    std::cout << &response;

    return 0;
}
```
and 
```cpp
#include <curl/curl.h>

int main(void)
{
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "open-assistant.io/tasks/random");

        /* Perform the request, res will get the return code */ 
        res = curl_easy_perform(curl);
        /* Check for errors */ 
        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));

        /* always cleanup */ 
        curl_easy_cleanup(curleasycleanup(curl); 
        }

        return 0; 
}
```