Войти
ПрограммированиеФорумСеть

Немного обвязал cURL, может кому пригодится (curly.hpp)

#0
1:46, 8 июля 2019

В рамках разработки Enduro2D обвязал curl для простых http асинхронных запросов, выложил отдельно. На гитхабе фичи и примеры.

Буду рад лайкам, форкам и пользователям, замечаниям и фиче-реквестам! :)

Ссылочка: https://github.com/BlackMATov/curly.hpp

#1
(Правка: 4:35) 4:26, 8 июля 2019

MATov
мне код понравился. но несколько моментов показались странными:
> #include <curly.hpp/curly.hpp>
точка в названии директории — ну не знаю, такое чувство, что какая-нибудь IDE или source control на этом обязательно упадут.

auto request = net::request_builder()
    .method(net::http_method::POST)
    .url("http://www.httpbin.org/post")
    .header("Content-Type", "application/json")
    .content(R"({"hello" : "world"})")
    .send();
при каждом создании request'а ты указываешь url. почему тогда его не сделать обязательным аргументом в конструкторе request_builder()? аналогично если ты при каждом POST запросе обязан указывать content, почему их не добавить в один метод? аналогично некоторые другие методы, которые необходимо вызывать группой, может быть правильнее сделать одним методом.
#2
(Правка: 8:57) 8:45, 8 июля 2019

Suslik
> аналогично если ты при каждом POST запросе обязан указывать content
Не всем POST запросам нужен content, например, у нас в проекте есть API, где параметры для POST запроса содержатся в самом URLе.
Насчёт урла в конструкторе, то туда лучше помещать базовый URL, а дальнейшие параметры передавать отдельно

#3
(Правка: 8:56) 8:56, 8 июля 2019

Вот кстати два примера. Мне первый кажется более удобочитаемым, чисто в силу того что базовый урл и параметры расположены рядом

auto request = net::request_builder()
    .method(net::http_method::GET)
    .url("https://gamedev.ru/code/forum/")
    .parameter("id", "245446#m2")
    .header("Content-Type", "text/html")
    .send();
auto request = net::request_builder("https://gamedev.ru/code/forum/")
    .method(net::http_method::GET)
    .parameter("id", "245446#m2")
    .header("Content-Type", "text/html")
    .send();
#4
16:31, 8 июля 2019

Suslik
> мне код понравился.

Пасиб!

> точка в названии директории — ну не знаю, такое чувство, что какая-нибудь IDE
> или source control на этом обязательно упадут.

Ага, тоже боюсь, но у меня несколько либ уже так сделаны, пока до чего дотянулся - всё работает.

На счёт групп Madware дело говорит, слишком всё кастомизируемо, поэтому оставил отдельно, но мона в констукторе сейчас передавать url и/или method, если удобнее. Единственный обязательный параметр - url, его возможно и следует вынести обязательным, согласен, но отдельно - читаемее.

Madware
Ага, ишью про параметры заэскейпенные есть, займусь на днях, только они будут передаваться в content наверное, а не отдельной функцией, пока не придумал как сделать так, чтобы не запутаться с контентом и параметрами.

#5
(Правка: 5:17) 5:12, 9 июля 2019

MATov
> пока не придумал как сделать так, чтобы не запутаться с контентом и параметрами
Есть два вида параметров:
в http.request.header.URL
в http.request.body // где и как там писать/читать параметры говорит http.request.header.content-type.

#6
8:32, 9 июля 2019
.method(net::http_method::GET)
Не проще ли было бы
.method_get()
или даже просто
.get()
ибо и короче и вариантов всё-равно немного.
ПрограммированиеФорумСеть