Библиотека libcurl — неплохо для начала.
Обычно уже есть в дистрибутиве:
find / -name "*curl*" -type d 2>/dev/null
В код вставляется легко: #include <curl/curl.h>
Флаг компиляции -lcurl, как и ожидаем.
Документации полно, и как раз для C: https://curl.se/libcurl/c/
Tip
Торчат объектные уши https://curl.se/libcurl/c/allfuncs.html
flowchart TB
gi(ВКЛ):::green
subgraph handle
ei([вкл]):::green
opt([настроить]):::yellow
do([сделать]):::yellow
eq([выкл]):::red
end
gq(ВЫКЛ):::red
gi ==> handle ==> gq
ei --> opt --> do --> eq
classDef green fill:#9A9A00,stroke:#9A9A00,color:#F6F0D8;
classDef yellow fill:#CC9105,stroke:#CC9105,color:#F6F0D8;
classDef red fill:#D65D0E,stroke:#D65D0E,color:#F6F0D8;
- curl_global_init() — завести всю шарманку
- curl_global_cleanup() — …и не забыть потом выключить
- curl_version_info() — узнать, что мы можем
- curl_easy_init() — наша цель
- curl_easy_cleanup() — …тоже не забыть убрать
- curl_easy_setopt() — куда, как, зачем идём, что делать с результатом и т. п.
- curl_easy_perform() — делай!
Warning
easy — блокирующая работа с сетью. Система работает, мы стоим ждём курим бамбук.
<img width="937" height="795" alt="Снимок экрана 2026-02-20 в 16 39 38" src="https://github.com/user-attachments/assets/e467c70d-1043-4349-9e25-2adaa44544d6" />
---
> — Куда ставить-то?
> — Да подожди ты!
- [CURLOPT_WRITEDATA](https://curl.se/libcurl/c/CURLOPT_WRITEDATA.html) — указатель хоть куда-нибудь
- [CURLOPT_WRITEFUNCTION](https://curl.se/libcurl/c/CURLOPT_WRITEFUNCTION.html) — если мы не кидаем в файл, а сохраняем данные иначе
- [CULROPT_HEADER](https://curl.se/libcurl/c/CURLOPT_HEADER.html) — если нам ценны заголовки
> [!INFO] Теперь это называется callback
- *задача со звёздочкой* — CURLOPT_HEADERFUNCTION и CURLOPT_HEADERDATA отдельно
- Переписать заново пример из документации — полезное упражнение
- Больше данных.
- Не кэшируется.
- Может что-то менять на сервере.
flowchart LR
headers([Заголовки]):::green
data([Данные]):::yellow
protocol([Протокол]):::red
url([URL]):::black
and((•)):::black
headers --> and
data -.-> and
protocol ==> and
url ==> and
and ==> Запрос
subgraph Запрос
rl(Стартовая строка):::blue
hdrs(Заголовки):::white
body(Тело):::purple
end
classDef red fill:#D65D0E,stroke:#D65D0E,color:#F6F0D8;
classDef green fill:#9A9A00,stroke:#9A9A00,color:#F6F0D8;
classDef blue fill:#0077BB,stroke:#0077BB,color:#F6F0D8;
classDef yellow fill:#CC9105,stroke:#CC9105,color:#F6F0D8;
classDef black fill:#272727,stroke:#272727,color:#FBFAF3;
classDef purple fill:#00756F,stroke:#00756F,color:#F6F0D8;
classDef white fill:#FBFAF3,stroke:#F6F0D8,color:#272727;
Note
К нашим услугам благоустроенный httpbin.org
curl_slist— тип списка- curl_slist_append() — добавляем заголовок в список
- CURLOPT_HTTPHEADER — сюда кидаем список заголовков
- CURLOPT_POST — включаем протокол POST
- CURLOPT_POSTFIELDS — это если хотим что-то послать
Warning
И снова JSON, ну что ты будешь делать!