Jun 022019
 

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

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

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

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

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

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

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

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 для изменения вывода)

Sorry, the comment form is closed at this time.