{"id":19536033,"url":"https://github.com/miyako/4d-plugin-curl-ftp","last_synced_at":"2026-03-12T07:04:35.315Z","repository":{"id":147172325,"uuid":"113933017","full_name":"miyako/4d-plugin-curl-ftp","owner":"miyako","description":"FTP/SFTP/FTPS client based on libcurl","archived":false,"fork":false,"pushed_at":"2022-02-14T00:25:44.000Z","size":363178,"stargazers_count":7,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-04T14:21:43.753Z","etag":null,"topics":["4d-plugin"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miyako.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-12T02:28:26.000Z","updated_at":"2024-06-25T11:48:12.000Z","dependencies_parsed_at":"2023-07-17T09:45:08.232Z","dependency_job_id":null,"html_url":"https://github.com/miyako/4d-plugin-curl-ftp","commit_stats":null,"previous_names":[],"tags_count":58,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-curl-ftp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-curl-ftp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-curl-ftp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-curl-ftp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miyako","download_url":"https://codeload.github.com/miyako/4d-plugin-curl-ftp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251001504,"owners_count":21520958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["4d-plugin"],"created_at":"2024-11-11T02:20:46.152Z","updated_at":"2025-10-25T10:36:28.154Z","avatar_url":"https://github.com/miyako.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![version](https://img.shields.io/badge/version-17%2B-3E8B93)\n![platform](https://img.shields.io/static/v1?label=platform\u0026message=osx-64%20|%20win-32%20|%20win-64\u0026color=blue)\n[![license](https://img.shields.io/github/license/miyako/4d-plugin-curl-ftp)](LICENSE)\n![downloads](https://img.shields.io/github/downloads/miyako/4d-plugin-curl-ftp/total)\n\n# 4d-plugin-curl-ftp\nHTTP client based on libcurl-7.62.0\n\n### List of 4D Internet Commands and replacements\n\n``FTP_Append`` :  n/a (use ``APPEND`` option)    \n``FTP_ChangeDir`` : n/a (sessions are not kept open)  \n``FTP_Delete`` : ``cURL_FTP_Delete``  \n``FTP_GetDirList`` : ``cURL_FTP_GetDirList``  \n``FTP_GetFileInfo`` : ``cURL_FTP_GetFileInfo``  \n``FTP_GetPassive`` : n/a (use ``FTPPORT`` option)  \n``FTP_GetType`` : n/a (always binary transfer)  \n``FTP_Login`` : n/a (sessions are not kept open)  \n``FTP_Logout`` : n/a (sessions are not kept open)  \n``FTP_MacBinary`` : n/a (deprecated)  \n``FTP_MakeDir`` : ``cURL_FTP_MakeDir``  \n``FTP_PrintDir`` : ``cURL_FTP_PrintDir``  \n``FTP_Receive`` : ``cURL_FTP_Receive``  \n``FTP_RemoveDir`` : ``cURL_FTP_RemoveDir``    \n``FTP_Rename`` : ``cURL_FTP_Rename``  \n``FTP_Send`` : ``cURL_FTP_Send``  \n``FTP_SetPassive`` : n/a (use ``FTPPORT`` option)  \n``FTP_SetType`` : n/a (always binary transfer)   \n``FTP_System``: ``cURL_FTP_System``  \n``FTP_VerifyID`` : n/a (sessions are not kept open)   \n``FTP_Progress`` : n/a (use ``PRIVATE`` option)   \n\n### Points of interest\n\n* Missing directories can be created with ``_MakeDir`` and ``_Send``\n\n* ``_Receive`` supports [wildcards](https://curl.haxx.se/libcurl/c/CURLOPT_WILDCARDMATCH.html)\n\n* reduced CPU consumption\n\n* callback method to monitor progress or abort if necessary\n\nalthough the API is optimsied for FTP, ``_Send`` and ``_Receive`` actually work with other protocols such as HTTP or TFTP.\n\n* Encoding support\n\nFor servers that do not support ``OPTS UTF8 ON`` the plugin can convert non-unicode text. Any ``iconv`` charset can be specified.\n\n```\nC_OBJECT($options)\n\n$URL:=\"ftp://ftp.server.com/\"\n\nOB SET($options;\\\n\"URL\";$URL;\\\n\"ENCODING_OUT\";\"cp932\";\\\n\"USERNAME\";\"user\";\\\n\"PASSWORD\";\"pass\")\n\nC_TEXT($list)\n\n$error:=cURL_FTP_PrintDir (JSON Stringify($options);$list)\n```\n\nCommands that support ``ENCODING_IN`` (outgoing text)\n\n* cURL_FTP_Delete\n* cURL_FTP_MakeDir\n* cURL_FTP_RemoveDir\n* cURL_FTP_Rename\n\nCommands that support ``ENCODING_OUT`` (incoming text)\n\n* cURL_FTP_System\n* cURL_FTP_PrintDir\n* cURL_FTP_GetDirList\n\n### Note on FTPS\n\nset the protocol to ``ftps://`` if you want to use **implicit** FTPS\n\nset the protocol to ``ftp://`` and add the option ``USE_SSL`` if you want to use **explicit** FTPS\n\nuse the option ``CAINFO`` for server ceritificate verification\n\nto skip verification, set ``SSL_VERIFYPEER`` to ``0``\n\nsee also [forums.4d.com](https://forums.4d.com/Post/FR/31497545/1/33294227#33294227) for discussion on SFTP.\n\n---\n\n## Syntax\n\n```\nerror:=cURL_FTP_Delete(options{;callbackMethod})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\ncalls ``DELE`` or ``rm`` (``sftp:``)\n\n```\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://ftp.example.com/a/b/sample.txt\";\\\n\"USERNAME\";\"user\";\\\n\"PASSWORD\";\"pass\")\n\n$error:=cURL_FTP_Delete (JSON Stringify($options))\n```\n\n```\nerror:=cURL_FTP_GetDirList(options;list{;callbackMethod})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\nlist|TEXT|\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\ncalls ``LIST`` via [CURLOPT_CUSTOMREQUEST](https://curl.haxx.se/libcurl/c/CURLOPT_CUSTOMREQUEST.html)\n\nthe url must end with a delimiter (``/``)\n\n```\nC_OBJECT($options)\n\nOB SET($options;\"URL\";\"ftp://ftp.4d.com/SAMPLE_DATABASES/4D/4D_v13/demo_dbs/\")\n\n$error:=cURL_FTP_GetDirList (JSON Stringify($options);$list)\n```\n\n```\n-r--r--r-- 1 ftp ftp        2845148 Jul 17  2015 4DHierarchicalLists.zip\n-r--r--r-- 1 ftp ftp       72547498 Jul 17  2015 4DIndexes.zip\n-r--r--r-- 1 ftp ftp        5575780 Jul 17  2015 4DListboxes.zip\n-r--r--r-- 1 ftp ftp        4269584 Jul 17  2015 4DObjects.zip\n-r--r--r-- 1 ftp ftp       98552632 Jul 17  2015 4DPictures.zip\n-r--r--r-- 1 ftp ftp        8482751 Jul 17  2015 4DSQL.zip\n-r--r--r-- 1 ftp ftp        5429818 Jul 17  2015 4DStaticWebBuilder.zip\n```\n\nexample of splitting elements\n\n```\n$error:=cURL_FTP_GetDirList (JSON Stringify($options);$dir)\n\nIf ($error=0)\n  ARRAY LONGINT($pos;0)\n  ARRAY LONGINT($len;0)\n  $i:=1\n\n  While (Match regex(\"(?m)^(\\\\S+)\\\\s+(\\\\d+)\\\\s+(\\\\S+)\\\\s+(\\\\S+)\\\\s+(\\\\d+)\\\\s+([:L:]{3}\\\\s+\\\\d+)\\\\s+(\\\\d+:\\\\d+)\\\\s+(.+)$\";$dir;$i;$pos;$len))\n    $f1:=Substring($dir;$pos{1};$len{1})\n    $f2:=Num(Substring($dir;$pos{2};$len{2}))\n    $f3:=Substring($dir;$pos{3};$len{3})\n    $f4:=Substring($dir;$pos{4};$len{4})\n    $f5:=Num(Substring($dir;$pos{5};$len{5}))\n    $f6:=Substring($dir;$pos{6};$len{6})\n    $f7:=Time(Substring($dir;$pos{7};$len{7}))\n    $f8:=Substring($dir;$pos{8};$len{8})\n    $i:=$pos{Size of array($pos)}+$len{Size of array($len)}\n  End while \n\nEnd if\n```\n\n```\nerror:=cURL_FTP_GetFileInfo(options;info{;callbackMethod})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\ninfo|TEXT|\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\nuses [curl_easy_getinfo](https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html) with [CURLOPT_FILETIME](https://curl.haxx.se/libcurl/c/CURLOPT_FILETIME.html) and [CURLINFO_FILETIME](https://curl.haxx.se/libcurl/c/CURLINFO_FILETIME.html)\n\n```\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://test.rebex.net/readme.txt\";\\\n\"USERNAME\";\"demo\";\\\n\"PASSWORD\";\"password\")\n\n$error:=cURL_FTP_GetFileInfo (JSON Stringify($options);$info)\n```\n\n```\n{\"size\":\"403\",\"date\":\"2014-04-08T14:09:39Z\"}\n```\n\n```\nerror:=cURL_FTP_MakeDir(options{;createMissingDir{;callbackMethod}})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\ncreateMissingDir|LONGINT|\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\ncalls ``MKD`` or ``mkdir`` (``sftp:``)\n\n[CURLOPT_FTP_CREATE_MISSING_DIRS](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_CREATE_MISSING_DIRS.html) is ``CURLFTP_CREATE_DIR_RETRY `` if ``createMissingDir`` is ``1``\n\n```\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://ftp.example.com/a/b/c\";\\\n\"USERNAME\";\"user\";\\\n\"PASSWORD\";\"pass\")\n\n$createMissingDir:=1\n\n$error:=cURL_FTP_MakeDir (JSON Stringify($options);$createMissingDir)\n```\n\n```\nerror:=cURL_FTP_PrintDir(options;dir{;callbackMethod})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\ndir|TEXT|\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\ncalls ``NLST`` via [CURLOPT_DIRLISTONLY](https://curl.haxx.se/libcurl/c/CURLOPT_DIRLISTONLY.html)\n\nthe url must end with a delimiter (``/``)\n\n```\nC_OBJECT($options)\n\nOB SET($options;\"URL\";\"ftp://ftp.4d.com/SAMPLE_DATABASES/4D/4D_v13/demo_dbs/\")\n\n$error:=cURL_FTP_PrintDir (JSON Stringify($options);$list)\n```\n\n```\n4DHierarchicalLists.zip\n4DIndexes.zip\n4DListboxes.zip\n4DObjects.zip\n4DPictures.zip\n4DSQL.zip\n4DStaticWebBuilder.zip\n```\n\n```\nerror:=cURL_FTP_Receive(options;path{;wildcardMatch{;callbackMethod}})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\npath|TEXT|local system path (folder or file)\nwildcardMatch|LONGINT|optional\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\n[CURLOPT_WILDCARDMATCH](https://curl.haxx.se/libcurl/c/CURLOPT_WILDCARDMATCH.html) is used if ``wildcardMatch`` is ``1``\n\nspecify a folder in ``path`` when using ``wildcardMatch``\n\notherwise, specify a file\n\n```\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://ftp.4d.com/SAMPLE_DATABASES/4D/4D_v13/demo_dbs/*.zip\")\n\n$path:=System folder(Desktop)+\"sample_ftp\"+Folder separator\n\n$error:=cURL_FTP_Receive (JSON Stringify($options);$path;1)\n```\n\n```\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://ftp.4d.com/SAMPLE_DATABASES/4D/4D_v13/demo_dbs/4DIndexes.zip\")\n\n$path:=System folder(Desktop)+\"sample_ftp\"+Folder separator+\"sample.zip\"\n\n$error:=cURL_FTP_Receive (JSON Stringify($options);$path;0)\n```\n\n```\nerror:=cURL_FTP_RemoveDir(options{;callbackMethod}})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\ncalls ``RMD`` or ``rmdir`` (``sftp:``)\n\n```\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://ftp.example.com/a/b/c\";\\\n\"USERNAME\";\"user\";\\\n\"PASSWORD\";\"pass\")\n\n$error:=cURL_FTP_RemoveDir (JSON Stringify($options))\n```\n\n```\nerror:=cURL_FTP_Rename(options;name{;callbackMethod})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\nname|TEXT|\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\ncalls ``RNFR`` followed by ``RNTO`` or ``rename`` (``sftp:``)\n\n```\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://ftp.example.com/a/b/c\";\\\n\"USERNAME\";\"user\";\\\n\"PASSWORD\";\"pass\")\n\n$name:=\"/a/b/c/d\" \n\n$error:=cURL_FTP_Rename (JSON Stringify($options);$name)\n```\n\n```\nerror:=cURL_FTP_Send(options;path{;createMissingDir{;callbackMethod}}})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\npath|TEXT|local system path\ncreateMissingDir|LONGINT|optional\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\n[CURLOPT_FTP_CREATE_MISSING_DIRS](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_CREATE_MISSING_DIRS.html) is ``CURLFTP_CREATE_DIR_RETRY`` if ``createMissingDir`` is ``1``\n\n```\n$path:=System folder(Desktop)+\"test.txt\"\n\nC_OBJECT($options)\n\nOB SET($options;\\\n\"URL\";\"ftp://ftp.example.com/a/b/c/test.txt\";\\\n\"USERNAME\";\"user\";\\\n\"PASSWORD\";\"pass\")\n\n$createMissingDir:=1\n\n$error:=cURL_FTP_Send (JSON Stringify($options);$path;$createMissingDir)\n```\n\n```\nerror:=cURL_FTP_System(options;system{;callbackMethod})\n```\n\nParameter|Type|Description\n------------|------------|----\noptions|TEXT|``JSON``\nsystem|TEXT|\ncallbackMethod|TEXT|optional\nerror|LONGINT|[Error code](https://curl.haxx.se/libcurl/c/libcurl-errors.html)\n\ncalls ``SYST``\n\nnot supported for SFTP because [CURLOPT_PREQUOTE](https://github.com/curl/curl/issues/1514) is unavailable\n\n```\nC_OBJECT($options)\n\nOB SET($options;\"URL\";\"ftp://ftp.4d.com/\")\n\n$error:=cURL_FTP_System (JSON Stringify($options);$system)\n```\n\n```\nUNIX emulated by FileZilla\n```\n\n\n---\n\nProperties of ``options``\n\n* General\n\n[URL](https://curl.haxx.se/libcurl/c/CURLOPT_URL.html)  \n[USERNAME](https://curl.haxx.se/libcurl/c/CURLOPT_USERNAME.html)  \n[PASSWORD](https://curl.haxx.se/libcurl/c/CURLOPT_PASSWORD.html)  \n[FTPPORT](https://curl.haxx.se/libcurl/c/CURLOPT_FTPPORT.html)  \n[APPEND](https://curl.haxx.se/libcurl/c/CURLOPT_APPEND.html)  \n[FTP_ACCOUNT](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_ACCOUNT.html)  \n[PRIVATE](https://curl.haxx.se/libcurl/c/CURLOPT_PRIVATE.html)  \n\n* RFC 2428\n\n[FTP_USE_EPRT](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_USE_EPRT.html)  \n[FTP_USE_EPSV](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_USE_EPSV.html)  \n\n* Host Specific\n\n[FTP_USE_PRET](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_USE_PRET.html)  \n[FTP_ALTERNATIVE_TO_USER](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_ALTERNATIVE_TO_USER.html)  \n[FTP_FILEMETHOD](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_FILEMETHOD.html)  \n\nvalues: ``MULTICWD``, ``NOCWD``, ``SINGLECWD``\n\n* Connection\n\n[TCP_KEEPALIVE](https://curl.haxx.se/libcurl/c/CURLOPT_TCP_KEEPALIVE.html)  \n[TCP_KEEPIDLE](https://curl.haxx.se/libcurl/c/CURLOPT_TCP_KEEPIDLE.html)  \n[TCP_KEEPINTVL](https://curl.haxx.se/libcurl/c/CURLOPT_TCP_KEEPINTVL.html)  \n\n* Threshold\n\n[FTP_RESPONSE_TIMEOUT](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_RESPONSE_TIMEOUT.html)  \n[CONNECTTIMEOUT](https://curl.haxx.se/libcurl/c/CURLOPT_CONNECTTIMEOUT.html)  \n[TIMEOUT](https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html)  \n[LOW_SPEED_TIME](https://curl.haxx.se/libcurl/c/CURLOPT_LOW_SPEED_TIME.html)  \n[LOW_SPEED_LIMIT](https://curl.haxx.se/libcurl/c/CURLOPT_LOW_SPEED_LIMIT.html)  \n\n* Verification\n\n[SSL_VERIFYHOST](https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html)  \n[SSL_VERIFYPEER](https://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html)  \n[CAINFO](https://curl.haxx.se/libcurl/c/CURLOPT_CAINFO.html)  \n\n* Encryption\n\n[FTPSSLAUTH](https://curl.haxx.se/libcurl/c/CURLOPT_FTPSSLAUTH.html)  \n\nvalues: ``AUTH_DEFAULT``, ``AUTH_SSL``, ``AUTH_TLS``\n\n[FTP_SSL_CCC](https://curl.haxx.se/libcurl/c/CURLOPT_FTP_SSL_CCC.html)  \n\nvalues: ``CCC_NONE``, ``CCC_PASSIVE``, ``CCC_ACTIVE``\n\n* added in ``1.1``\n\n[USE_SSL](https://curl.haxx.se/libcurl/c/CURLOPT_USE_SSL.html)  \n\nvalues: ``USESSL_NONE`` ``USESSL_TRY`` ``USESSL_CONTROL`` ``USESSL_ALL``\n\n* SSH\n\n[SSH_AUTH_TYPES](https://curl.haxx.se/libcurl/c/CURLOPT_SSH_AUTH_TYPES.html)  \n[SSH_COMPRESSION](https://curl.haxx.se/libcurl/c/CURLOPT_SSH_COMPRESSION.html)  \n[SSH_HOST_PUBLIC_KEY_MD5](https://curl.haxx.se/libcurl/c/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html)  \n[SSH_PUBLIC_KEYFILE](https://curl.haxx.se/libcurl/c/CURLOPT_SSH_PUBLIC_KEYFILE.html)  \n[SSH_PRIVATE_KEYFILE](https://curl.haxx.se/libcurl/c/CURLOPT_SSH_PRIVATE_KEYFILE.html)  \n[SSH_KNOWNHOSTS](https://curl.haxx.se/libcurl/c/CURLOPT_SSH_KNOWNHOSTS.html)\n\n* added in ``2.8``\n\n[TLS13_CIPHERS](https://curl.haxx.se/libcurl/c/CURLOPT_TLS13_CIPHERS.html)  \n[PROXY_TLS13_CIPHERS](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY_TLS13_CIPHERS.html)  \n[UPKEEP_INTERVAL_MS](https://curl.haxx.se/libcurl/c/CURLOPT_UPKEEP_INTERVAL_MS.html)  \n[HAPROXYPROTOCOL](https://curl.haxx.se/libcurl/c/CURLOPT_HAPROXYPROTOCOL.html)  \n[DISALLOW_USERNAME_IN_URL](https://curl.haxx.se/libcurl/c/CURLOPT_DISALLOW_USERNAME_IN_URL.html)  \n[DNS_SHUFFLE_ADDRESSES](https://curl.haxx.se/libcurl/c/CURLOPT_DNS_SHUFFLE_ADDRESSES.html)  \n[HAPPY_EYEBALLS_TIMEOUT_MS](https://curl.haxx.se/libcurl/c/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.html)  \n[UPLOAD_BUFFERSIZE](https://curl.haxx.se/libcurl/c/CURLOPT_UPLOAD_BUFFERSIZE.html)  \n[DOH_URL](https://curl.haxx.se/libcurl/c/CURLOPT_DOH_URL.html)\n\n---\n\nSignature of ``callbackMethod``\n\n```\nabort:=method(curlInfo;userInfo)\n```\n\nParameter|Type|Description\n------------|------------|----\ncurlInfo|TEXT|``JSON`` (``curl_easy_getinfo``)\nuserInfo|TEXT|the text passed as the ``PRIVATE`` property of ``option``\nabort|BOOLEAN|\n\n[``CURLcode``](https://curl.haxx.se/libcurl/c/libcurl-errors.html) is returned in ``error``. when ``True`` is returned from the callback method, ``CURLE_ABORTED_BY_CALLBACK (42)`` is returned. same if the process has been aborted via the runtime explorer. aborting the debugger will not kill the process immediately.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyako%2F4d-plugin-curl-ftp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiyako%2F4d-plugin-curl-ftp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyako%2F4d-plugin-curl-ftp/lists"}