diff --git a/main.cpp b/main.cpp
index 4c4dbf2..0d88070 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,8 @@
 #include "text.h"
 #include "svg.h"
 #include <curl/curl.h>
+#include <sstream>
+#include <string>
 using namespace std;
 
 struct Input {
@@ -18,7 +20,6 @@ Input input_data(istream& in, bool prompt) {
         cerr << "Enter number count: ";
     }
     cin >> number_count;
-
     inp.numbers.resize(number_count);
     if (prompt){
                 cerr << "Enter numbers: ";
@@ -34,23 +35,45 @@ Input input_data(istream& in, bool prompt) {
     return inp;
 }
 
-int main(int argc, char* argv[]) {
-    curl_global_init(CURL_GLOBAL_ALL);
-    if (argc > 1) {
-        CURL* curl = curl_easy_init();
-          if(curl) {
-            CURLcode res;
-            curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
-            res = curl_easy_perform(curl);
+size_t
+write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
+    stringstream* buffer = reinterpret_cast<stringstream*>(ctx);
+    size_t data_size = item_size * item_count;
+    (*buffer).write(reinterpret_cast<const char*>(items), data_size);
+    return data_size;
+}
+
+Input
+download(const string& adress){
+    stringstream buffer;
+    CURL* curl = curl_easy_init();
+    if(curl) {
+
+        CURLcode res;
+        curl_easy_setopt(curl, CURLOPT_URL, adress.c_str());
+        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
+        res = curl_easy_perform(curl);
         if (res != CURLE_OK){
-                cerr << curl_easy_strerror(res);
-                exit(1);
-            }
-            curl_easy_cleanup(curl);
+            cerr << curl_easy_strerror(res);
+            exit(1);
         }
+        curl_easy_cleanup(curl);
     }
+
+    return input_data(buffer, false);
+}
+int main(int argc, char* argv[]) {
+    Input input;
+    if (argc > 1) {
+        input = download(argv[1]);
+    } else {
+        input = input_data(cin, true);
+    }
+
     auto in = input_data(cin, true);
     auto bins = make_histogram(in.numbers, in.bin_count);
     show_histogram_svg(bins);
     return 0;
 }
+