Skip to content

[Модуль Amxx] Curl (Windows & Linux)

Модуль является обёрткой над библиотекой libcurl. Поддерживает ssl и позволяет делать передачи в неблокирующем режиме. Функции: Все нативы выполняет ровно то что и их C аналоги, за исключением некоторых: Функция начинает передачу, и по завершении передачи будет вызван callback callbackComplite…

ModuleCounter-Strike 1.6Views:26Comments:4
This page is not translated into English yet: the Russian text is shown.

Description

Модуль является обёрткой над библиотекой libcurl. Поддерживает ssl и позволяет делать передачи в неблокирующем режиме.

Функции:
Все нативы выполняет ровно то что и их C аналоги, за исключением некоторых:

Pawn
native void:curl_easy_perform(const CURL:handle, const callbackComplite[], const data[] = {}, const data_len = 0)

Функция начинает передачу, и по завершении передачи будет вызван callback callbackComplite.
Третьим параметром можно указать массив с т.н. юзердатой, он будет передан в callbackComplite, четвертый параметр размер массива.

Если data установлена, тогда callback должен иметь такую сигнатуру:

Pawn
public compliteCallback(CURL:curl, CURLcode:code, data[])

Если не установлена, тогда тогда сигнатура должна быть такой:

Pawn
public compliteCallback(CURL:curl, CURLcode:code)

Автор: Polarhigh
Скачать: GitHub releases
Исходники: https://github.com/Polarhigh/AmxxCurl
Примеры: https://github.com/Polarhigh/AmxxCurl/tree/master/amx_examples

Некоторые примечания и рекомендации под катом.

Общие примечания:
1) Вы НЕ должны вызывать curl_easy_cleanup и другие функции очистки пока передача не завершилась!
2) Пока нет возможности реально установить/получить значение переменной типа curl_off_t, сейчас происходит преобразование типа к cell (обычная ячейка amxx), но это не очень правильно. Значения зачастую будут некорректными.
3) Всегда определяйте опцию CURLOPT_BUFFERSIZE, если используете колбэк WRITEFUNCTION укажите в качестве параметра размер буфера не более 1024, иначе рискуете получить ошибки stack error, возможно даже повесить сервер. Если вы получаете ошибки stack error при использовании других колбэков, то можно определить в плагине #pragma dynamic 30000.
4) Не забывайте, что вам необходимо очищать память по указателям для curl_slist и curl_httppost с помощью функций curl_slist_free_all и curl_formfree соответственно.
5) Если к моменту смены карты остались незавершенные передачи, то сервер будет ожидать завершения всех передач, колбэк callbackComplite будет вызван после plugin_end.

Рекомендации:
1) Вы можете использовать 1 дескриптор curl несколько раз для одного url.
2) Используйте curl_easy_setopt(curl, CURLOPT_VERBOSE, 1) для отладки плагина, если затрудняетесь определить причину неполадки в плагине. (По-умолчания вывод дебаг информации будет осуществляться в консоль сервера, вы можете определить колбэк CURLOPT_DEBUGFUNCTION для изменения вывода)

Comments

4
  1. мне в свое время нужно было получать данные с https сайта, через обычные сокеты это нельзя сделать (в теории можно, но это было бы неоправданно сложно) вообще с помощью модуля можно загружать/выгружать файлы по ftp, посылать/просматривать почту, использовать протоколы с шифрованием (опять же https, sftp), и например можно напрямую с VK API работать) и т.п. и т.д.

    1. Recast navigation ещё бы доделать)

      1. оо даа)

      2. @Polarhigh А надежда есть?

    Related

    Что такое BMOD? BMOD позволяет amxx программистам использовать альтернативный физический движок (Bullet). Немного видео для наглядности: https://youtube.com/watch?v=Nn26KkoIGNY https://youtube.com/watch?v=CUmNRsVro1U https://youtube.com/watch?v=vUCIKGlyDBQ https://youtube.com/watch?v=fAJlHJehlI8…