Jump to content

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies. Find out more here. X
X


Photo

libcURL UDF - the multiprotocol file transfer library

libcurl dll upload download

  • Please log in to reply
18 replies to this topic

#1 smartee

smartee

    Hippies.They're everywhere.

  • Active Members
  • PipPipPipPipPipPip
  • 661 posts

Posted 06 April 2012 - 10:51 AM

Here is a UDF geared at making libcurl more accessible to AutoIt users.

Homepage of curl and libcurl: http://curl.haxx.se

Technical overview:
libcurl is a free and easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos), file transfer resume, http proxy tunneling and more! (from http://curl.haxx.se/libcurl/)

Features:
This UDF wraps the "easy" interface of libcurl.
Below is a complete list of the functions currently available in this library:
AutoIt         
; #CURRENT# ===================================================================================================================== ;_curl_easy_escape ;_curl_easy_init ;_curl_easy_cleanup ;_curl_easy_duphandle ;_curl_easy_getinfo ;_curl_easy_pause ;_curl_easy_perform ;_curl_easy_recv ;_curl_easy_reset ;_curl_easy_send ;_curl_easy_setopt ;_curl_easy_strerror ;_curl_easy_unescape ;_curl_formadd ;_curl_formfree ;_curl_free ;_curl_getdate ;_curl_global_cleanup ;_curl_global_init ;_curl_global_init_mem ;_curl_slist_append ;_curl_slist_free_all ;_curl_version ;_curl_version_info ; ===============================================================================================================================


Code:

libcURLConstants.au3
AutoIt         
#include-once ; libcURLConstants.au3, generated from curl.h of libcurl 7.25.0 on 04/06/2012 05:11:23 GMT for use with "libcURL.au3", the libcurl wrapper UDF by smartee. ; possible error codes from all sorts of curl functions Global Const $CURLE_OK                           = 0 Global Const $CURLE_UNSUPPORTED_PROTOCOL         = 1 Global Const $CURLE_FAILED_INIT                  = 2 Global Const $CURLE_URL_MALFORMAT                = 3 Global Const $CURLE_NOT_BUILT_IN                 = 4 Global Const $CURLE_COULDNT_RESOLVE_PROXY        = 5 Global Const $CURLE_COULDNT_RESOLVE_HOST         = 6 Global Const $CURLE_COULDNT_CONNECT              = 7 Global Const $CURLE_FTP_WEIRD_SERVER_REPLY       = 8 Global Const $CURLE_REMOTE_ACCESS_DENIED         = 9 Global Const $CURLE_FTP_ACCEPT_FAILED            = 10 Global Const $CURLE_FTP_WEIRD_PASS_REPLY         = 11 Global Const $CURLE_FTP_ACCEPT_TIMEOUT           = 12 Global Const $CURLE_FTP_WEIRD_PASV_REPLY         = 13 Global Const $CURLE_FTP_WEIRD_227_FORMAT         = 14 Global Const $CURLE_FTP_CANT_GET_HOST            = 15 Global Const $CURLE_OBSOLETE16                   = 16 Global Const $CURLE_FTP_COULDNT_SET_TYPE         = 17 Global Const $CURLE_PARTIAL_FILE                 = 18 Global Const $CURLE_FTP_COULDNT_RETR_FILE        = 19 Global Const $CURLE_OBSOLETE20                   = 20 Global Const $CURLE_QUOTE_ERROR                  = 21 Global Const $CURLE_HTTP_RETURNED_ERROR          = 22 Global Const $CURLE_WRITE_ERROR                  = 23 Global Const $CURLE_OBSOLETE24                   = 24 Global Const $CURLE_UPLOAD_FAILED                = 25 Global Const $CURLE_READ_ERROR                   = 26 Global Const $CURLE_OUT_OF_MEMORY                = 27 Global Const $CURLE_OPERATION_TIMEDOUT           = 28 Global Const $CURLE_OBSOLETE29                   = 29 Global Const $CURLE_FTP_PORT_FAILED              = 30 Global Const $CURLE_FTP_COULDNT_USE_REST         = 31 Global Const $CURLE_OBSOLETE32                   = 32 Global Const $CURLE_RANGE_ERROR                  = 33 Global Const $CURLE_HTTP_POST_ERROR              = 34 Global Const $CURLE_SSL_CONNECT_ERROR            = 35 Global Const $CURLE_BAD_DOWNLOAD_RESUME          = 36 Global Const $CURLE_FILE_COULDNT_READ_FILE       = 37 Global Const $CURLE_LDAP_CANNOT_BIND             = 38 Global Const $CURLE_LDAP_SEARCH_FAILED           = 39 Global Const $CURLE_OBSOLETE40                   = 40 Global Const $CURLE_FUNCTION_NOT_FOUND           = 41 Global Const $CURLE_ABORTED_BY_CALLBACK          = 42 Global Const $CURLE_BAD_FUNCTION_ARGUMENT        = 43 Global Const $CURLE_OBSOLETE44                   = 44 Global Const $CURLE_INTERFACE_FAILED             = 45 Global Const $CURLE_OBSOLETE46                   = 46 Global Const $CURLE_TOO_MANY_REDIRECTS           = 47 Global Const $CURLE_UNKNOWN_OPTION               = 48 Global Const $CURLE_TELNET_OPTION_SYNTAX         = 49 Global Const $CURLE_OBSOLETE50                   = 50 Global Const $CURLE_PEER_FAILED_VERIFICATION     = 51 Global Const $CURLE_GOT_NOTHING                  = 52 Global Const $CURLE_SSL_ENGINE_NOTFOUND          = 53 Global Const $CURLE_SSL_ENGINE_SETFAILED         = 54 Global Const $CURLE_SEND_ERROR                   = 55 Global Const $CURLE_RECV_ERROR                   = 56 Global Const $CURLE_OBSOLETE57                   = 57 Global Const $CURLE_SSL_CERTPROBLEM              = 58 Global Const $CURLE_SSL_CIPHER                   = 59 Global Const $CURLE_SSL_CACERT                   = 60 Global Const $CURLE_BAD_CONTENT_ENCODING         = 61 Global Const $CURLE_LDAP_INVALID_URL             = 62 Global Const $CURLE_FILESIZE_EXCEEDED            = 63 Global Const $CURLE_USE_SSL_FAILED               = 64 Global Const $CURLE_SEND_FAIL_REWIND             = 65 Global Const $CURLE_SSL_ENGINE_INITFAILED        = 66 Global Const $CURLE_LOGIN_DENIED                 = 67 Global Const $CURLE_TFTP_NOTFOUND                = 68 Global Const $CURLE_TFTP_PERM                    = 69 Global Const $CURLE_REMOTE_DISK_FULL             = 70 Global Const $CURLE_TFTP_ILLEGAL                 = 71 Global Const $CURLE_TFTP_UNKNOWNID               = 72 Global Const $CURLE_REMOTE_FILE_EXISTS           = 73 Global Const $CURLE_TFTP_NOSUCHUSER              = 74 Global Const $CURLE_CONV_FAILED                  = 75 Global Const $CURLE_CONV_REQD                    = 76 Global Const $CURLE_SSL_CACERT_BADFILE           = 77 Global Const $CURLE_REMOTE_FILE_NOT_FOUND        = 78 Global Const $CURLE_SSH                          = 79 Global Const $CURLE_SSL_SHUTDOWN_FAILED          = 80 Global Const $CURLE_AGAIN                        = 81 Global Const $CURLE_SSL_CRL_BADFILE              = 82 Global Const $CURLE_SSL_ISSUER_ERROR             = 83 Global Const $CURLE_FTP_PRET_FAILED              = 84 Global Const $CURLE_RTSP_CSEQ_ERROR              = 85 Global Const $CURLE_RTSP_SESSION_ERROR           = 86 Global Const $CURLE_FTP_BAD_FILE_LIST            = 87 Global Const $CURLE_CHUNK_FAILED                 = 88 ; minimum size of error buffer to be used with $CURLOPT_ERRORBUFFER Global Const $CURL_ERROR_SIZE                    = 256 ; $CURLPROTO_ constants are for the $CURLOPT_*PROTOCOLS options Global Const $CURLPROTO_HTTP                     = BitShift(1, 0) Global Const $CURLPROTO_HTTPS                    = BitShift(1, -1) Global Const $CURLPROTO_FTP                      = BitShift(1, -2) Global Const $CURLPROTO_FTPS                     = BitShift(1, -3) Global Const $CURLPROTO_SCP                      = BitShift(1, -4) Global Const $CURLPROTO_SFTP                     = BitShift(1, -5) Global Const $CURLPROTO_TELNET                   = BitShift(1, -6) Global Const $CURLPROTO_LDAP                     = BitShift(1, -7) Global Const $CURLPROTO_LDAPS                    = BitShift(1, -8) Global Const $CURLPROTO_DICT                     = BitShift(1, -9) Global Const $CURLPROTO_FILE                     = BitShift(1, -10) Global Const $CURLPROTO_TFTP                     = BitShift(1, -11) Global Const $CURLPROTO_IMAP                     = BitShift(1, -12) Global Const $CURLPROTO_IMAPS                    = BitShift(1, -13) Global Const $CURLPROTO_POP3                     = BitShift(1, -14) Global Const $CURLPROTO_POP3S                    = BitShift(1, -15) Global Const $CURLPROTO_SMTP                     = BitShift(1, -16) Global Const $CURLPROTO_SMTPS                    = BitShift(1, -17) Global Const $CURLPROTO_RTSP                     = BitShift(1, -18) Global Const $CURLPROTO_RTMP                     = BitShift(1, -19) Global Const $CURLPROTO_RTMPT                    = BitShift(1, -20) Global Const $CURLPROTO_RTMPE                    = BitShift(1, -21) Global Const $CURLPROTO_RTMPTE                   = BitShift(1, -22) Global Const $CURLPROTO_RTMPS                    = BitShift(1, -23) Global Const $CURLPROTO_RTMPTS                   = BitShift(1, -24) Global Const $CURLPROTO_GOPHER                   = BitShift(1, -25) Global Const $CURLPROTO_ALL                      = BitNOT(0) ; $CURLOPTTYPE_[what] constants Global Const $CURLOPTTYPE_LONG                   = 0 Global Const $CURLOPTTYPE_OBJECTPOINT            = 10000 Global Const $CURLOPTTYPE_FUNCTIONPOINT          = 20000 Global Const $CURLOPTTYPE_OFF_T                  = 30000 ; $CURLOPT_[what] constants, to be used with _curl_easy_setopt() Global Const $CURLOPT_FILE                       =   $CURLOPTTYPE_OBJECTPOINT + 1 Global Const $CURLOPT_URL                        =   $CURLOPTTYPE_OBJECTPOINT + 2 Global Const $CURLOPT_PORT                       =          $CURLOPTTYPE_LONG + 3 Global Const $CURLOPT_PROXY                      =   $CURLOPTTYPE_OBJECTPOINT + 4 Global Const $CURLOPT_USERPWD                    =   $CURLOPTTYPE_OBJECTPOINT + 5 Global Const $CURLOPT_PROXYUSERPWD               =   $CURLOPTTYPE_OBJECTPOINT + 6 Global Const $CURLOPT_RANGE                      =   $CURLOPTTYPE_OBJECTPOINT + 7 Global Const $CURLOPT_INFILE                     =   $CURLOPTTYPE_OBJECTPOINT + 9 Global Const $CURLOPT_ERRORBUFFER                =   $CURLOPTTYPE_OBJECTPOINT + 10 Global Const $CURLOPT_WRITEFUNCTION              = $CURLOPTTYPE_FUNCTIONPOINT + 11 Global Const $CURLOPT_READFUNCTION               = $CURLOPTTYPE_FUNCTIONPOINT + 12 Global Const $CURLOPT_TIMEOUT                    =          $CURLOPTTYPE_LONG + 13 Global Const $CURLOPT_INFILESIZE                 =          $CURLOPTTYPE_LONG + 14 Global Const $CURLOPT_POSTFIELDS                 =   $CURLOPTTYPE_OBJECTPOINT + 15 Global Const $CURLOPT_REFERER                    =   $CURLOPTTYPE_OBJECTPOINT + 16 Global Const $CURLOPT_FTPPORT                    =   $CURLOPTTYPE_OBJECTPOINT + 17 Global Const $CURLOPT_USERAGENT                  =   $CURLOPTTYPE_OBJECTPOINT + 18 Global Const $CURLOPT_LOW_SPEED_LIMIT            =          $CURLOPTTYPE_LONG + 19 Global Const $CURLOPT_LOW_SPEED_TIME             =          $CURLOPTTYPE_LONG + 20 Global Const $CURLOPT_RESUME_FROM                =          $CURLOPTTYPE_LONG + 21 Global Const $CURLOPT_COOKIE                     =   $CURLOPTTYPE_OBJECTPOINT + 22 Global Const $CURLOPT_HTTPHEADER                 =   $CURLOPTTYPE_OBJECTPOINT + 23 Global Const $CURLOPT_HTTPPOST                   =   $CURLOPTTYPE_OBJECTPOINT + 24 Global Const $CURLOPT_SSLCERT                    =   $CURLOPTTYPE_OBJECTPOINT + 25 Global Const $CURLOPT_KEYPASSWD                  =   $CURLOPTTYPE_OBJECTPOINT + 26 Global Const $CURLOPT_CRLF                       =          $CURLOPTTYPE_LONG + 27 Global Const $CURLOPT_QUOTE                      =   $CURLOPTTYPE_OBJECTPOINT + 28 Global Const $CURLOPT_WRITEHEADER                =   $CURLOPTTYPE_OBJECTPOINT + 29 Global Const $CURLOPT_COOKIEFILE                 =   $CURLOPTTYPE_OBJECTPOINT + 31 Global Const $CURLOPT_SSLVERSION                 =          $CURLOPTTYPE_LONG + 32 Global Const $CURLOPT_TIMECONDITION              =          $CURLOPTTYPE_LONG + 33 Global Const $CURLOPT_TIMEVALUE                  =          $CURLOPTTYPE_LONG + 34 Global Const $CURLOPT_CUSTOMREQUEST              =   $CURLOPTTYPE_OBJECTPOINT + 36 Global Const $CURLOPT_STDERR                     =   $CURLOPTTYPE_OBJECTPOINT + 37 Global Const $CURLOPT_POSTQUOTE                  =   $CURLOPTTYPE_OBJECTPOINT + 39 Global Const $CURLOPT_WRITEINFO                  =   $CURLOPTTYPE_OBJECTPOINT + 40 Global Const $CURLOPT_VERBOSE                    =          $CURLOPTTYPE_LONG + 41 Global Const $CURLOPT_HEADER                     =          $CURLOPTTYPE_LONG + 42 Global Const $CURLOPT_NOPROGRESS                 =          $CURLOPTTYPE_LONG + 43 Global Const $CURLOPT_NOBODY                     =          $CURLOPTTYPE_LONG + 44 Global Const $CURLOPT_FAILONERROR                =          $CURLOPTTYPE_LONG + 45 Global Const $CURLOPT_UPLOAD                     =          $CURLOPTTYPE_LONG + 46 Global Const $CURLOPT_POST                       =          $CURLOPTTYPE_LONG + 47 Global Const $CURLOPT_DIRLISTONLY                =          $CURLOPTTYPE_LONG + 48 Global Const $CURLOPT_APPEND                     =          $CURLOPTTYPE_LONG + 50 Global Const $CURLOPT_NETRC                      =          $CURLOPTTYPE_LONG + 51 Global Const $CURLOPT_FOLLOWLOCATION             =          $CURLOPTTYPE_LONG + 52 Global Const $CURLOPT_TRANSFERTEXT               =          $CURLOPTTYPE_LONG + 53 Global Const $CURLOPT_PUT                        =          $CURLOPTTYPE_LONG + 54 Global Const $CURLOPT_PROGRESSFUNCTION           = $CURLOPTTYPE_FUNCTIONPOINT + 56 Global Const $CURLOPT_PROGRESSDATA               =   $CURLOPTTYPE_OBJECTPOINT + 57 Global Const $CURLOPT_AUTOREFERER                =          $CURLOPTTYPE_LONG + 58 Global Const $CURLOPT_PROXYPORT                  =          $CURLOPTTYPE_LONG + 59 Global Const $CURLOPT_POSTFIELDSIZE              =          $CURLOPTTYPE_LONG + 60 Global Const $CURLOPT_HTTPPROXYTUNNEL            =          $CURLOPTTYPE_LONG + 61 Global Const $CURLOPT_INTERFACE                  =   $CURLOPTTYPE_OBJECTPOINT + 62 Global Const $CURLOPT_KRBLEVEL                   =   $CURLOPTTYPE_OBJECTPOINT + 63 Global Const $CURLOPT_SSL_VERIFYPEER             =          $CURLOPTTYPE_LONG + 64 Global Const $CURLOPT_CAINFO                     =   $CURLOPTTYPE_OBJECTPOINT + 65 Global Const $CURLOPT_MAXREDIRS                  =          $CURLOPTTYPE_LONG + 68 Global Const $CURLOPT_FILETIME                   =          $CURLOPTTYPE_LONG + 69 Global Const $CURLOPT_TELNETOPTIONS              =   $CURLOPTTYPE_OBJECTPOINT + 70 Global Const $CURLOPT_MAXCONNECTS                =          $CURLOPTTYPE_LONG + 71 Global Const $CURLOPT_CLOSEPOLICY                =          $CURLOPTTYPE_LONG + 72 Global Const $CURLOPT_FRESH_CONNECT              =          $CURLOPTTYPE_LONG + 74 Global Const $CURLOPT_FORBID_REUSE               =          $CURLOPTTYPE_LONG + 75 Global Const $CURLOPT_RANDOM_FILE                =   $CURLOPTTYPE_OBJECTPOINT + 76 Global Const $CURLOPT_EGDSOCKET                  =   $CURLOPTTYPE_OBJECTPOINT + 77 Global Const $CURLOPT_CONNECTTIMEOUT             =          $CURLOPTTYPE_LONG + 78 Global Const $CURLOPT_HEADERFUNCTION             = $CURLOPTTYPE_FUNCTIONPOINT + 79 Global Const $CURLOPT_HTTPGET                    =          $CURLOPTTYPE_LONG + 80 Global Const $CURLOPT_SSL_VERIFYHOST             =          $CURLOPTTYPE_LONG + 81 Global Const $CURLOPT_COOKIEJAR                  =   $CURLOPTTYPE_OBJECTPOINT + 82 Global Const $CURLOPT_SSL_CIPHER_LIST            =   $CURLOPTTYPE_OBJECTPOINT + 83 Global Const $CURLOPT_HTTP_VERSION               =          $CURLOPTTYPE_LONG + 84 Global Const $CURLOPT_FTP_USE_EPSV               =          $CURLOPTTYPE_LONG + 85 Global Const $CURLOPT_SSLCERTTYPE                =   $CURLOPTTYPE_OBJECTPOINT + 86 Global Const $CURLOPT_SSLKEY                     =   $CURLOPTTYPE_OBJECTPOINT + 87 Global Const $CURLOPT_SSLKEYTYPE                 =   $CURLOPTTYPE_OBJECTPOINT + 88 Global Const $CURLOPT_SSLENGINE                  =   $CURLOPTTYPE_OBJECTPOINT + 89 Global Const $CURLOPT_SSLENGINE_DEFAULT          =          $CURLOPTTYPE_LONG + 90 Global Const $CURLOPT_DNS_USE_GLOBAL_CACHE       =          $CURLOPTTYPE_LONG + 91 Global Const $CURLOPT_DNS_CACHE_TIMEOUT          =          $CURLOPTTYPE_LONG + 92 Global Const $CURLOPT_PREQUOTE                   =   $CURLOPTTYPE_OBJECTPOINT + 93 Global Const $CURLOPT_DEBUGFUNCTION              = $CURLOPTTYPE_FUNCTIONPOINT + 94 Global Const $CURLOPT_DEBUGDATA                  =   $CURLOPTTYPE_OBJECTPOINT + 95 Global Const $CURLOPT_COOKIESESSION              =          $CURLOPTTYPE_LONG + 96 Global Const $CURLOPT_CAPATH                     =   $CURLOPTTYPE_OBJECTPOINT + 97 Global Const $CURLOPT_BUFFERSIZE                 =          $CURLOPTTYPE_LONG + 98 Global Const $CURLOPT_NOSIGNAL                   =          $CURLOPTTYPE_LONG + 99 Global Const $CURLOPT_SHARE                      =   $CURLOPTTYPE_OBJECTPOINT + 100 Global Const $CURLOPT_PROXYTYPE                  =          $CURLOPTTYPE_LONG + 101 Global Const $CURLOPT_ACCEPT_ENCODING            =   $CURLOPTTYPE_OBJECTPOINT + 102 Global Const $CURLOPT_PRIVATE                    =   $CURLOPTTYPE_OBJECTPOINT + 103 Global Const $CURLOPT_HTTP200ALIASES             =   $CURLOPTTYPE_OBJECTPOINT + 104 Global Const $CURLOPT_UNRESTRICTED_AUTH          =          $CURLOPTTYPE_LONG + 105 Global Const $CURLOPT_FTP_USE_EPRT               =          $CURLOPTTYPE_LONG + 106 Global Const $CURLOPT_HTTPAUTH                   =          $CURLOPTTYPE_LONG + 107 Global Const $CURLOPT_SSL_CTX_FUNCTION           = $CURLOPTTYPE_FUNCTIONPOINT + 108 Global Const $CURLOPT_SSL_CTX_DATA               =   $CURLOPTTYPE_OBJECTPOINT + 109 Global Const $CURLOPT_FTP_CREATE_MISSING_DIRS    =          $CURLOPTTYPE_LONG + 110 Global Const $CURLOPT_PROXYAUTH                  =          $CURLOPTTYPE_LONG + 111 Global Const $CURLOPT_FTP_RESPONSE_TIMEOUT       =          $CURLOPTTYPE_LONG + 112 Global Const $CURLOPT_IPRESOLVE                  =          $CURLOPTTYPE_LONG + 113 Global Const $CURLOPT_MAXFILESIZE                =          $CURLOPTTYPE_LONG + 114 Global Const $CURLOPT_INFILESIZE_LARGE           =         $CURLOPTTYPE_OFF_T + 115 Global Const $CURLOPT_RESUME_FROM_LARGE          =         $CURLOPTTYPE_OFF_T + 116 Global Const $CURLOPT_MAXFILESIZE_LARGE          =         $CURLOPTTYPE_OFF_T + 117 Global Const $CURLOPT_NETRC_FILE                 =   $CURLOPTTYPE_OBJECTPOINT + 118 Global Const $CURLOPT_USE_SSL                    =          $CURLOPTTYPE_LONG + 119 Global Const $CURLOPT_POSTFIELDSIZE_LARGE        =         $CURLOPTTYPE_OFF_T + 120 Global Const $CURLOPT_TCP_NODELAY                =          $CURLOPTTYPE_LONG + 121 Global Const $CURLOPT_FTPSSLAUTH                 =          $CURLOPTTYPE_LONG + 129 Global Const $CURLOPT_IOCTLFUNCTION              = $CURLOPTTYPE_FUNCTIONPOINT + 130 Global Const $CURLOPT_IOCTLDATA                  =   $CURLOPTTYPE_OBJECTPOINT + 131 Global Const $CURLOPT_FTP_ACCOUNT                =   $CURLOPTTYPE_OBJECTPOINT + 134 Global Const $CURLOPT_COOKIELIST                 =   $CURLOPTTYPE_OBJECTPOINT + 135 Global Const $CURLOPT_IGNORE_CONTENT_LENGTH      =          $CURLOPTTYPE_LONG + 136 Global Const $CURLOPT_FTP_SKIP_PASV_IP           =          $CURLOPTTYPE_LONG + 137 Global Const $CURLOPT_FTP_FILEMETHOD             =          $CURLOPTTYPE_LONG + 138 Global Const $CURLOPT_LOCALPORT                  =          $CURLOPTTYPE_LONG + 139 Global Const $CURLOPT_LOCALPORTRANGE             =          $CURLOPTTYPE_LONG + 140 Global Const $CURLOPT_CONNECT_ONLY               =          $CURLOPTTYPE_LONG + 141 Global Const $CURLOPT_CONV_FROM_NETWORK_FUNCTION = $CURLOPTTYPE_FUNCTIONPOINT + 142 Global Const $CURLOPT_CONV_TO_NETWORK_FUNCTION   = $CURLOPTTYPE_FUNCTIONPOINT + 143 Global Const $CURLOPT_CONV_FROM_UTF8_FUNCTION    = $CURLOPTTYPE_FUNCTIONPOINT + 144 Global Const $CURLOPT_MAX_SEND_SPEED_LARGE       =         $CURLOPTTYPE_OFF_T + 145 Global Const $CURLOPT_MAX_RECV_SPEED_LARGE       =         $CURLOPTTYPE_OFF_T + 146 Global Const $CURLOPT_FTP_ALTERNATIVE_TO_USER    =   $CURLOPTTYPE_OBJECTPOINT + 147 Global Const $CURLOPT_SOCKOPTFUNCTION            = $CURLOPTTYPE_FUNCTIONPOINT + 148 Global Const $CURLOPT_SOCKOPTDATA                =   $CURLOPTTYPE_OBJECTPOINT + 149 Global Const $CURLOPT_SSL_SESSIONID_CACHE        =          $CURLOPTTYPE_LONG + 150 Global Const $CURLOPT_SSH_AUTH_TYPES             =          $CURLOPTTYPE_LONG + 151 Global Const $CURLOPT_SSH_PUBLIC_KEYFILE         =   $CURLOPTTYPE_OBJECTPOINT + 152 Global Const $CURLOPT_SSH_PRIVATE_KEYFILE        =   $CURLOPTTYPE_OBJECTPOINT + 153 Global Const $CURLOPT_FTP_SSL_CCC                =          $CURLOPTTYPE_LONG + 154 Global Const $CURLOPT_TIMEOUT_MS                 =          $CURLOPTTYPE_LONG + 155 Global Const $CURLOPT_CONNECTTIMEOUT_MS          =          $CURLOPTTYPE_LONG + 156 Global Const $CURLOPT_HTTP_TRANSFER_DECODING     =          $CURLOPTTYPE_LONG + 157 Global Const $CURLOPT_HTTP_CONTENT_DECODING      =          $CURLOPTTYPE_LONG + 158 Global Const $CURLOPT_NEW_FILE_PERMS             =          $CURLOPTTYPE_LONG + 159 Global Const $CURLOPT_NEW_DIRECTORY_PERMS        =          $CURLOPTTYPE_LONG + 160 Global Const $CURLOPT_POSTREDIR                  =          $CURLOPTTYPE_LONG + 161 Global Const $CURLOPT_SSH_HOST_PUBLIC_KEY_MD5    =   $CURLOPTTYPE_OBJECTPOINT + 162 Global Const $CURLOPT_OPENSOCKETFUNCTION         = $CURLOPTTYPE_FUNCTIONPOINT + 163 Global Const $CURLOPT_OPENSOCKETDATA             =   $CURLOPTTYPE_OBJECTPOINT + 164 Global Const $CURLOPT_COPYPOSTFIELDS             =   $CURLOPTTYPE_OBJECTPOINT + 165 Global Const $CURLOPT_PROXY_TRANSFER_MODE        =          $CURLOPTTYPE_LONG + 166 Global Const $CURLOPT_SEEKFUNCTION               = $CURLOPTTYPE_FUNCTIONPOINT + 167 Global Const $CURLOPT_SEEKDATA                   =   $CURLOPTTYPE_OBJECTPOINT + 168 Global Const $CURLOPT_CRLFILE                    =   $CURLOPTTYPE_OBJECTPOINT + 169 Global Const $CURLOPT_ISSUERCERT                 =   $CURLOPTTYPE_OBJECTPOINT + 170 Global Const $CURLOPT_ADDRESS_SCOPE              =          $CURLOPTTYPE_LONG + 171 Global Const $CURLOPT_CERTINFO                   =          $CURLOPTTYPE_LONG + 172 Global Const $CURLOPT_USERNAME                   =   $CURLOPTTYPE_OBJECTPOINT + 173 Global Const $CURLOPT_PASSWORD                   =   $CURLOPTTYPE_OBJECTPOINT + 174 Global Const $CURLOPT_PROXYUSERNAME              =   $CURLOPTTYPE_OBJECTPOINT + 175 Global Const $CURLOPT_PROXYPASSWORD              =   $CURLOPTTYPE_OBJECTPOINT + 176 Global Const $CURLOPT_NOPROXY                    =   $CURLOPTTYPE_OBJECTPOINT + 177 Global Const $CURLOPT_TFTP_BLKSIZE               =          $CURLOPTTYPE_LONG + 178 Global Const $CURLOPT_SOCKS5_GSSAPI_SERVICE      =   $CURLOPTTYPE_OBJECTPOINT + 179 Global Const $CURLOPT_SOCKS5_GSSAPI_NEC          =          $CURLOPTTYPE_LONG + 180 Global Const $CURLOPT_PROTOCOLS                  =          $CURLOPTTYPE_LONG + 181 Global Const $CURLOPT_REDIR_PROTOCOLS            =          $CURLOPTTYPE_LONG + 182 Global Const $CURLOPT_SSH_KNOWNHOSTS             =   $CURLOPTTYPE_OBJECTPOINT + 183 Global Const $CURLOPT_SSH_KEYFUNCTION            = $CURLOPTTYPE_FUNCTIONPOINT + 184 Global Const $CURLOPT_SSH_KEYDATA                =   $CURLOPTTYPE_OBJECTPOINT + 185 Global Const $CURLOPT_MAIL_FROM                  =   $CURLOPTTYPE_OBJECTPOINT + 186 Global Const $CURLOPT_MAIL_RCPT                  =   $CURLOPTTYPE_OBJECTPOINT + 187 Global Const $CURLOPT_FTP_USE_PRET               =          $CURLOPTTYPE_LONG + 188 Global Const $CURLOPT_RTSP_REQUEST               =          $CURLOPTTYPE_LONG + 189 Global Const $CURLOPT_RTSP_SESSION_ID            =   $CURLOPTTYPE_OBJECTPOINT + 190 Global Const $CURLOPT_RTSP_STREAM_URI            =   $CURLOPTTYPE_OBJECTPOINT + 191 Global Const $CURLOPT_RTSP_TRANSPORT             =   $CURLOPTTYPE_OBJECTPOINT + 192 Global Const $CURLOPT_RTSP_CLIENT_CSEQ           =          $CURLOPTTYPE_LONG + 193 Global Const $CURLOPT_RTSP_SERVER_CSEQ           =          $CURLOPTTYPE_LONG + 194 Global Const $CURLOPT_INTERLEAVEDATA             =   $CURLOPTTYPE_OBJECTPOINT + 195 Global Const $CURLOPT_INTERLEAVEFUNCTION         = $CURLOPTTYPE_FUNCTIONPOINT + 196 Global Const $CURLOPT_WILDCARDMATCH              =          $CURLOPTTYPE_LONG + 197 Global Const $CURLOPT_CHUNK_BGN_FUNCTION         = $CURLOPTTYPE_FUNCTIONPOINT + 198 Global Const $CURLOPT_CHUNK_END_FUNCTION         = $CURLOPTTYPE_FUNCTIONPOINT + 199 Global Const $CURLOPT_FNMATCH_FUNCTION           = $CURLOPTTYPE_FUNCTIONPOINT + 200 Global Const $CURLOPT_CHUNK_DATA                 =   $CURLOPTTYPE_OBJECTPOINT + 201 Global Const $CURLOPT_FNMATCH_DATA               =   $CURLOPTTYPE_OBJECTPOINT + 202 Global Const $CURLOPT_RESOLVE                    =   $CURLOPTTYPE_OBJECTPOINT + 203 Global Const $CURLOPT_TLSAUTH_USERNAME           =   $CURLOPTTYPE_OBJECTPOINT + 204 Global Const $CURLOPT_TLSAUTH_PASSWORD           =   $CURLOPTTYPE_OBJECTPOINT + 205 Global Const $CURLOPT_TLSAUTH_TYPE               =   $CURLOPTTYPE_OBJECTPOINT + 206 Global Const $CURLOPT_TRANSFER_ENCODING          =          $CURLOPTTYPE_LONG + 207 Global Const $CURLOPT_CLOSESOCKETFUNCTION        = $CURLOPTTYPE_FUNCTIONPOINT + 208 Global Const $CURLOPT_CLOSESOCKETDATA            =   $CURLOPTTYPE_OBJECTPOINT + 209 Global Const $CURLOPT_GSSAPI_DELEGATION          =          $CURLOPTTYPE_LONG + 210 Global Const $CURLOPT_DNS_SERVERS                =   $CURLOPTTYPE_OBJECTPOINT + 211 Global Const $CURLOPT_ACCEPTTIMEOUT_MS           =          $CURLOPTTYPE_LONG + 212 Global Const $CURLOPT_TCP_KEEPALIVE              =          $CURLOPTTYPE_LONG + 213 Global Const $CURLOPT_TCP_KEEPIDLE               =          $CURLOPTTYPE_LONG + 214 Global Const $CURLOPT_TCP_KEEPINTVL              =          $CURLOPTTYPE_LONG + 215 Global Const $CURLOPT_SSL_OPTIONS                =          $CURLOPTTYPE_LONG + 216 Global Const $CURLOPT_MAIL_AUTH                  =   $CURLOPTTYPE_OBJECTPOINT + 217 ; some convenient "aliases" that follow the name scheme better Global Const $CURLOPT_WRITEDATA                  = $CURLOPT_FILE Global Const $CURLOPT_READDATA                   = $CURLOPT_INFILE Global Const $CURLOPT_HEADERDATA                 = $CURLOPT_WRITEHEADER Global Const $CURLOPT_RTSPHEADER                 = $CURLOPT_HTTPHEADER ; for use with _curl_global_init() Global Const $CURL_GLOBAL_SSL                    = BitShift(1, 0) Global Const $CURL_GLOBAL_WIN32                  = BitShift(1, -1) Global Const $CURL_GLOBAL_ALL                    = BitOR($CURL_GLOBAL_SSL, $CURL_GLOBAL_WIN32) Global Const $CURL_GLOBAL_NOTHING                = 0 Global Const $CURL_GLOBAL_DEFAULT                = $CURL_GLOBAL_ALL Global Const $CURLINFO_STRING                    = 0x100000 Global Const $CURLINFO_LONG                      = 0x200000 Global Const $CURLINFO_DOUBLE                    = 0x300000 Global Const $CURLINFO_SLIST                     = 0x400000 Global Const $CURLINFO_MASK                      = 0x0fffff Global Const $CURLINFO_TYPEMASK                  = 0xf00000 Global Const $CURLINFO_EFFECTIVE_URL             =           $CURLINFO_STRING + 1 Global Const $CURLINFO_RESPONSE_CODE             =             $CURLINFO_LONG + 2 Global Const $CURLINFO_TOTAL_TIME                =           $CURLINFO_DOUBLE + 3 Global Const $CURLINFO_NAMELOOKUP_TIME           =           $CURLINFO_DOUBLE + 4 Global Const $CURLINFO_CONNECT_TIME              =           $CURLINFO_DOUBLE + 5 Global Const $CURLINFO_PRETRANSFER_TIME          =           $CURLINFO_DOUBLE + 6 Global Const $CURLINFO_SIZE_UPLOAD               =           $CURLINFO_DOUBLE + 7 Global Const $CURLINFO_SIZE_DOWNLOAD             =           $CURLINFO_DOUBLE + 8 Global Const $CURLINFO_SPEED_DOWNLOAD            =           $CURLINFO_DOUBLE + 9 Global Const $CURLINFO_SPEED_UPLOAD              =           $CURLINFO_DOUBLE + 10 Global Const $CURLINFO_HEADER_SIZE               =             $CURLINFO_LONG + 11 Global Const $CURLINFO_REQUEST_SIZE              =             $CURLINFO_LONG + 12 Global Const $CURLINFO_SSL_VERIFYRESULT          =             $CURLINFO_LONG + 13 Global Const $CURLINFO_FILETIME                  =             $CURLINFO_LONG + 14 Global Const $CURLINFO_CONTENT_LENGTH_DOWNLOAD   =           $CURLINFO_DOUBLE + 15 Global Const $CURLINFO_CONTENT_LENGTH_UPLOAD     =           $CURLINFO_DOUBLE + 16 Global Const $CURLINFO_STARTTRANSFER_TIME        =           $CURLINFO_DOUBLE + 17 Global Const $CURLINFO_CONTENT_TYPE              =           $CURLINFO_STRING + 18 Global Const $CURLINFO_REDIRECT_TIME             =           $CURLINFO_DOUBLE + 19 Global Const $CURLINFO_REDIRECT_COUNT            =             $CURLINFO_LONG + 20 Global Const $CURLINFO_PRIVATE                   =           $CURLINFO_STRING + 21 Global Const $CURLINFO_HTTP_CONNECTCODE          =             $CURLINFO_LONG + 22 Global Const $CURLINFO_HTTPAUTH_AVAIL            =             $CURLINFO_LONG + 23 Global Const $CURLINFO_PROXYAUTH_AVAIL           =             $CURLINFO_LONG + 24 Global Const $CURLINFO_OS_ERRNO                  =             $CURLINFO_LONG + 25 Global Const $CURLINFO_NUM_CONNECTS              =             $CURLINFO_LONG + 26 Global Const $CURLINFO_SSL_ENGINES               =            $CURLINFO_SLIST + 27 Global Const $CURLINFO_COOKIELIST                =            $CURLINFO_SLIST + 28 Global Const $CURLINFO_LASTSOCKET                =             $CURLINFO_LONG + 29 Global Const $CURLINFO_FTP_ENTRY_PATH            =           $CURLINFO_STRING + 30 Global Const $CURLINFO_REDIRECT_URL              =           $CURLINFO_STRING + 31 Global Const $CURLINFO_PRIMARY_IP                =           $CURLINFO_STRING + 32 Global Const $CURLINFO_APPCONNECT_TIME           =           $CURLINFO_DOUBLE + 33 Global Const $CURLINFO_CERTINFO                  =            $CURLINFO_SLIST + 34 Global Const $CURLINFO_CONDITION_UNMET           =             $CURLINFO_LONG + 35 Global Const $CURLINFO_RTSP_SESSION_ID           =           $CURLINFO_STRING + 36 Global Const $CURLINFO_RTSP_CLIENT_CSEQ          =             $CURLINFO_LONG + 37 Global Const $CURLINFO_RTSP_SERVER_CSEQ          =             $CURLINFO_LONG + 38 Global Const $CURLINFO_RTSP_CSEQ_RECV            =             $CURLINFO_LONG + 39 Global Const $CURLINFO_PRIMARY_PORT              =             $CURLINFO_LONG + 40 Global Const $CURLINFO_LOCAL_IP                  =           $CURLINFO_STRING + 41 Global Const $CURLINFO_LOCAL_PORT                =             $CURLINFO_LONG + 42 Global Const $CURLINFO_HTTP_CODE                 = $CURLINFO_RESPONSE_CODE ; The _curl_easy_pause function pauses or unpauses transfers. Select the new state by setting the bitmask, use the convenience defines below. Global Const $CURLPAUSE_RECV                     = BitShift(1, 0) Global Const $CURLPAUSE_RECV_CONT                = 0 Global Const $CURLPAUSE_SEND                     = BitShift(1, -2) Global Const $CURLPAUSE_SEND_CONT                = 0 Global Const $CURLPAUSE_ALL                      = BitOR($CURLPAUSE_RECV, $CURLPAUSE_SEND) Global Const $CURLPAUSE_CONT                     = BitOR($CURLPAUSE_RECV_CONT, $CURLPAUSE_SEND_CONT) Global Const $CURL_WRITEFUNC_PAUSE               = 0x10000001 Global Const $CURL_READFUNC_ABORT                = 0x10000000 Global Const $CURL_READFUNC_PAUSE                = 0x10000001 ; $CURLFORM_[what] constants, to be used with _curl_formadd() Global Const $CURLFORM_COPYNAME                  = 1 Global Const $CURLFORM_PTRNAME                   = 2 Global Const $CURLFORM_NAMELENGTH                = 3 Global Const $CURLFORM_COPYCONTENTS              = 4 Global Const $CURLFORM_PTRCONTENTS               = 5 Global Const $CURLFORM_CONTENTSLENGTH            = 6 Global Const $CURLFORM_FILECONTENT               = 7 Global Const $CURLFORM_ARRAY                     = 8 Global Const $CURLFORM_OBSOLETE                  = 9 Global Const $CURLFORM_FILE                      = 10 Global Const $CURLFORM_BUFFER                    = 11 Global Const $CURLFORM_BUFFERPTR                 = 12 Global Const $CURLFORM_BUFFERLENGTH              = 13 Global Const $CURLFORM_CONTENTTYPE               = 14 Global Const $CURLFORM_CONTENTHEADER             = 15 Global Const $CURLFORM_FILENAME                  = 16 Global Const $CURLFORM_END                       = 17 Global Const $CURLFORM_OBSOLETE2                 = 18 Global Const $CURLFORM_STREAM                    = 19 ; return codes for _curl_formadd() Global Const $CURL_FORMADD_OK                    = 0 Global Const $CURL_FORMADD_MEMORY                = 1 Global Const $CURL_FORMADD_OPTION_TWICE          = 2 Global Const $CURL_FORMADD_NULL                  = 3 Global Const $CURL_FORMADD_UNKNOWN_OPTION        = 4 Global Const $CURL_FORMADD_INCOMPLETE            = 5 Global Const $CURL_FORMADD_ILLEGAL_ARRAY         = 6 Global Const $CURL_FORMADD_DISABLED              = 7 ; CURLversion Global Const $CURLVERSION_FIRST                  = 0 Global Const $CURLVERSION_SECOND                 = 1 Global Const $CURLVERSION_THIRD                  = 2 Global Const $CURLVERSION_FOURTH                 = 3 Global Const $CURLVERSION_NOW                    = $CURLVERSION_FOURTH Global Const $CURL_VERSION_IPV6                  = BitShift(1, 0) Global Const $CURL_VERSION_KERBEROS4             = BitShift(1, -1) Global Const $CURL_VERSION_SSL                   = BitShift(1, -2) Global Const $CURL_VERSION_LIBZ                  = BitShift(1, -3) Global Const $CURL_VERSION_NTLM                  = BitShift(1, -4) Global Const $CURL_VERSION_GSSNEGOTIATE          = BitShift(1, -5) Global Const $CURL_VERSION_DEBUG                 = BitShift(1, -6) Global Const $CURL_VERSION_ASYNCHDNS             = BitShift(1, -7) Global Const $CURL_VERSION_SPNEGO                = BitShift(1, -8) Global Const $CURL_VERSION_LARGEFILE             = BitShift(1, -9) Global Const $CURL_VERSION_IDN                   = BitShift(1, -10) Global Const $CURL_VERSION_SSPI                  = BitShift(1, -11) Global Const $CURL_VERSION_CONV                  = BitShift(1, -12) Global Const $CURL_VERSION_CURLDEBUG             = BitShift(1, -13) Global Const $CURL_VERSION_TLSAUTH_SRP           = BitShift(1, -14) Global Const $CURL_VERSION_NTLM_WB               = BitShift(1, -15)


libcURL.au3
AutoIt         
#include-once #include <libcURLConstants.au3> ; #INDEX# ======================================================================================================================= ; Title .........: libcURL UDF version 1.0 ; AutoIt Version : 3.3.6.1 + ; Language ......: English ; Description ...: URL transfer functions etc., built on 04/06/2012 05:11:23 GMT, uses libcurl, v7.25.0+, the multiprotocol file transfer library ; Author(s) .....: smartee ; Dll ...........: libcurl.dll ; =============================================================================================================================== ; #VARIABLES# =================================================================================================================== Global $g_hDll_libcurl = -1 ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ;_curl_easy_escape ;_curl_easy_init ;_curl_easy_cleanup ;_curl_easy_duphandle ;_curl_easy_getinfo ;_curl_easy_pause ;_curl_easy_perform ;_curl_easy_recv ;_curl_easy_reset ;_curl_easy_send ;_curl_easy_setopt ;_curl_easy_strerror ;_curl_easy_unescape ;_curl_formadd ;_curl_formfree ;_curl_free ;_curl_getdate ;_curl_global_cleanup ;_curl_global_init ;_curl_global_init_mem ;_curl_slist_append ;_curl_slist_free_all ;_curl_version ;_curl_version_info ; =============================================================================================================================== ; #INTERNAL_USE_ONLY# =========================================================================================================== ;__cURL_DllOpen ;__cURL_DllClose ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name...........: _curl_easy_escape ; Description ...: URL encodes the given string ; Syntax.........: _curl_easy_escape($curl, $url, $length) ; Parameters ....: $curl   - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ;                  $url    - String to be URL encoded. ;                  $length - Length of the string. If the length argument is set to 0 (zero), _curl_easy_escape() uses strlen() on the input url to find out the size. ;                  |0 - Calculate length. ; Return values .: Success - The URL encoded string. ;                  Failure - An empty string, "" ; Author ........: smartee ; Modified.......: ; Remarks .......: ; Related .......: None. ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_escape.html">http://curl.haxx.se/libcurl/c/curl_easy_escape.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_escape($curl, $url, $length)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, "")     Local $aRes = DllCall($g_hDll_libcurl, "str:cdecl", "curl_easy_escape", "ptr", $curl, "str", $url, "int", $length)     If @error Then Return SetError(2, @extended, "")     Return $aRes[0] EndFunc   ;==>_curl_easy_escape ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_init ; Description ...: Start a libcurl easy session ; Syntax ........: _curl_easy_init() ; Parameters ....: None. ; Return values .: Success - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_cleanup, _curl_global_init, _curl_easy_reset ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_init.html">http://curl.haxx.se/libcurl/c/curl_easy_init.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_init()     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "ptr:cdecl", "curl_easy_init")     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_easy_init ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_cleanup ; Description ...: End a libcurl easy session ; Syntax ........: _curl_easy_cleanup($handle) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ; Return values .: Success - 1 ;                  Failure - 0, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_init ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html">http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_cleanup($handle)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, 0)     DllCall($g_hDll_libcurl, "none:cdecl", "curl_easy_cleanup", "ptr", $handle)     If @error Then Return SetError(2, @extended, 0)     Return 1 EndFunc   ;==>_curl_easy_cleanup ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_duphandle ; Description ...: Clone a libcurl session handle ; Syntax ........: _curl_easy_duphandle($handle) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ; Return values .: Success - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_init, _curl_easy_cleanup, _curl_global_init ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_duphandle.html">http://curl.haxx.se/libcurl/c/curl_easy_duphandle.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_easy_duphandle($handle)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "ptr:cdecl", "curl_easy_duphandle", "ptr", $handle)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_easy_duphandle ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_getinfo ; Description ...: Extract information from a curl handle ; Syntax ........: _curl_easy_getinfo($handle, $option, Byref $parameter) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ;                  $option              - A $CURLINFO_* value. ;                  $parameter           - A variable to be filled in accordingly that can be relied upon only if the function returns $CURLE_OK. ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_setopt ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html">http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_getinfo($handle, $option, ByRef $parameter)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $asTypes[4] = ["ptr", "long", "double", "ptr"]     Local $iParamType = Int($option / 0x100000) - 1     Local $tCURLSTRUCT_INFO = DllStructCreate($asTypes[$iParamType])     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_easy_getinfo", "ptr", $handle, "int", $option, "ptr", DllStructGetPtr($tCURLSTRUCT_INFO))     If @error Then Return SetError(2, @extended, -1)     Switch $iParamType         Case 0             Local $tCURLSTRUCT_INFOBUFFER = DllStructCreate("char[256]", DllStructGetData($tCURLSTRUCT_INFO, 1))             $parameter = DllStructGetData($tCURLSTRUCT_INFOBUFFER, 1)         Case Else             $parameter = DllStructGetData($tCURLSTRUCT_INFO, 1)     EndSwitch     Return $aRes[0] EndFunc   ;==>_curl_easy_getinfo ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_pause ; Description ...: Pause and unpause a connection ; Syntax ........: _curl_easy_pause($handle, $bitmask) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ;                  $bitmask             - A $CURLPAUSE_* value that sets the new state of the connection. ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_cleanup, _curl_easy_reset ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_pause.html">http://curl.haxx.se/libcurl/c/curl_easy_pause.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_easy_pause($handle, $bitmask)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_easy_pause", "ptr", $handle, "int", $bitmask)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_easy_pause ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_perform ; Description ...: Perform a file transfer ; Syntax ........: _curl_easy_perform($handle) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_init, _curl_easy_setopt ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_perform.html">http://curl.haxx.se/libcurl/c/curl_easy_perform.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_perform($handle)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_easy_perform", "ptr", $handle)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_easy_perform ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_recv ; Description ...: Receives raw data on an "easy" connection ; Syntax ........: _curl_easy_recv($handle, $buffer, $buflen, $n) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ;                  $buffer              - A pointer to your buffer that will get the received data. ;                  $buflen              - The maximum amount of data you can get in that buffer. ;                  $n                   - A pointer to a variable that will receive the number of received bytes. ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_setopt, _curl_easy_perform ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_recv.html">http://curl.haxx.se/libcurl/c/curl_easy_recv.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_easy_recv($handle, $buffer, $buflen, $n)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_easy_recv", "ptr", $handle, "ptr", $buffer, "uint", $buflen, "ptr", $n)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_easy_recv ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_reset ; Description ...: Reset all options of a libcurl session handle ; Syntax ........: _curl_easy_reset($handle) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ; Return values .: Success - 1 ;                  Failure - 0, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_init, _curl_easy_cleanup, _curl_easy_setopt ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_reset.html">http://curl.haxx.se/libcurl/c/curl_easy_reset.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_easy_reset($handle)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, 0)     DllCall($g_hDll_libcurl, "none:cdecl", "curl_easy_reset", "ptr", $handle)     If @error Then Return SetError(2, @extended, 0)     Return 1 EndFunc   ;==>_curl_easy_reset ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_send ; Description ...: Sends raw data over an "easy" connection ; Syntax ........: _curl_easy_send($handle, $buffer, $buflen, $n) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ;                  $buffer              - A pointer to your buffer with data to be sent. ;                  $buflen              - Length of buffer. ;                  $n                   - A pointer to a variable that will receive the number of sent bytes. ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_setopt, _curl_easy_perform, _curl_easy_getinfo ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_send.html">http://curl.haxx.se/libcurl/c/curl_easy_send.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_easy_send($handle, $buffer, $buflen, $n)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_easy_send", "ptr", $handle, "ptr", $buffer, "uint", $buflen, "ptr", $n)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_easy_send ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_setopt ; Description ...: Set options for a curl easy handle ; Syntax ........: _curl_easy_setopt($handle, $option, $parameter) ; Parameters ....: $handle              - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ;                  $option              - A $CURLOPT_* value. ;                  $parameter           - A long, a function pointer, an object pointer or a large integer, depending on what the specific option expects. ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_init, _curl_easy_cleanup, _curl_easy_reset ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_setopt.html">http://curl.haxx.se/libcurl/c/curl_easy_setopt.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_setopt($handle, $option, $parameter)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $asTypes[4] = ["long", "ptr", "ptr", "int64"]     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_easy_setopt", "ptr", $handle, "int", $option, $asTypes[Int($option / 10000)], $parameter)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_easy_setopt ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_strerror ; Description ...: Return string describing error code ; Syntax ........: _curl_easy_strerror($errnum) ; Parameters ....: $errnum              - A $CURLE_* error code. ; Return values .: Success - A string describing the error code passed in the argument $errornum. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: None. ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_strerror.html">http://curl.haxx.se/libcurl/c/curl_easy_strerror.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_strerror($errnum)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, "")     Local $aRes = DllCall($g_hDll_libcurl, "str:cdecl", "curl_easy_strerror", "int", $errnum)     If @error Then Return SetError(2, @extended, "")     Return $aRes[0] EndFunc   ;==>_curl_easy_strerror ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_easy_unescape ; Description ...: URL decodes the given string ; Syntax ........: _curl_easy_unescape($curl, $url, $inlength, $outlength) ; Parameters ....: $curl                - A handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use _curl_easy_init() to get the handle. ;                  $url                 - String to be decoded. ;                  $inlength            - Length of string, if set to 0 (zero), _curl_easy_unescape() will use strlen() on the input url string to find out the size. ;                  $outlength           - If outlength is non-NULL, the function will write the length of the returned string in the integer it points to. This allows an escaped string containing %00 to still get used properly after unescaping. ; Return values .: Success - A pointer to a zero terminated string or NULL. ;                  Failure - An empty string, "", Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_escape, _curl_free ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_easy_unescape.html">http://curl.haxx.se/libcurl/c/curl_easy_unescape.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_easy_unescape($curl, $url, $inlength, $outlength)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, "")     Local $aRes = DllCall($g_hDll_libcurl, "str:cdecl", "curl_easy_unescape", "ptr", $curl, "str", $url, "int", $inlength, "ptr", $outlength)     If @error Then Return SetError(2, @extended, "")     Return $aRes[0] EndFunc   ;==>_curl_easy_unescape ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_formadd ; Description ...: Add a section to a multipart/formdata HTTP POST ; Syntax ........: _curl_formadd($firstitem, $lastitem, $option, $parameter, $option2, $parameter2[, $option3 = $CURLFORM_END]) ; Parameters ....: $firstitem           - A pointer to the firstitem. ;                  $lastitem            - A pointer to the lastitem. ;                  $option              - A $CURLFORM_* value. ;                  $parameter           - A string value depending on $option. ;                  $option2             - A $CURLFORM_* value. ;                  $parameter2          - A string value depending on $option. ;                  $option3             - [optional] A $CURLFORM_* value. Default is $CURLFORM_END. ; Return values .: Success - $CURL_FORMADD_OK or a $CURL_FORMADD_* code. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_easy_setopt, _curl_formfree ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_formadd.html">http://curl.haxx.se/libcurl/c/curl_formadd.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_formadd($firstitem, $lastitem, $option, $parameter, $option2, $parameter2, $option3 = $CURLFORM_END)     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_formadd", "ptr", $firstitem, "ptr", $lastitem, "int", $option, "str", $parameter, "int", $option2, "str", $parameter2, "int", $option3)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_formadd ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_formfree ; Description ...: Free a previously build multipart/formdata HTTP POST chain ; Syntax ........: _curl_formfree($form) ; Parameters ....: $form                - A pointer as returned from a previous call to _curl_formadd() and may be NULL. ; Return values .: Success - 1 ;                  Failure - 0, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_formadd ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_formfree.html">http://curl.haxx.se/libcurl/c/curl_formfree.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_formfree($form)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, 0)     DllCall($g_hDll_libcurl, "none:cdecl", "curl_formfree", "ptr", $form)     If @error Then Return SetError(2, @extended, 0)     Return 1 EndFunc   ;==>_curl_formfree ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_free ; Description ...: Reclaim memory that has been obtained through a libcurl call ; Syntax ........: _curl_free($ptr) ; Parameters ....: $ptr                 - A pointer value. ; Return values .: Success - 1 ;                  Failure - 0, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: None. ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_free.html">http://curl.haxx.se/libcurl/c/curl_free.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_free($ptr)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, 0)     DllCall($g_hDll_libcurl, "none:cdecl", "curl_free", "str", $ptr)     If @error Then Return SetError(2, @extended, 0)     Return 1 EndFunc   ;==>_curl_free ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_getdate ; Description ...: Convert a date string to number of seconds since January 1, 1970 ; Syntax ........: _curl_getdate($datestring, $now) ; Parameters ....: $datestring          - A string containing several items separated by whitespace. The order of the items is immaterial. ;                  $now                 - Not used, pass a NULL there. ; Return values .: Success - The number of seconds as described. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ;                  |3 - Failed to parse the date string. ; Author ........: smartee ; Modified ......: ; Remarks .......: This parser was written to handle date formats specified in RFC 822 (including the update in RFC 1123) using time zone name or time zone delta and RFC 850 (obsoleted by RFC 1036) and ANSI C's asctime() format. ;                  These formats are the only ones RFC 2616 says HTTP applications may use. ; Related .......: None. ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_getdate.html">http://curl.haxx.se/libcurl/c/curl_getdate.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_getdate($datestring, $now)     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "uint:cdecl", "curl_getdate", "str", $datestring, "ptr", $now)     If @error Then Return SetError(2, @extended, -1)     If $aRes[0] = -1 Then Return SetError(3, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_getdate ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_global_cleanup ; Description ...: Global libcurl cleanup ; Syntax ........: _curl_global_cleanup() ; Parameters ....: None. ; Return values .: Success - 1 ;                  Failure - 0, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: This function releases resources acquired by _curl_global_init(). ; Related .......: _curl_global_init ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_global_cleanup.html">http://curl.haxx.se/libcurl/c/curl_global_cleanup.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_global_cleanup()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, 0)     DllCall($g_hDll_libcurl, "none:cdecl", "curl_global_cleanup")     If @error Then Return SetError(2, @extended, 0)     Return 1 EndFunc   ;==>_curl_global_cleanup ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_global_init ; Description ...: Global libcurl initialisation ; Syntax ........: _curl_global_init($flags) ; Parameters ....: $flags               - A bit pattern that tells libcurl exactly what features to init. (A $CURL_GLOBAL_* value.) ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_global_init_mem ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_global_init.html">http://curl.haxx.se/libcurl/c/curl_global_init.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_global_init($flags)     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_global_init", "long", $flags)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_global_init ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_global_init_mem ; Description ...: Global libcurl initialisation with memory callbacks ; Syntax ........: _curl_global_init_mem($flags, $m, $f, $r, $s, $c) ; Parameters ....: $flags               - A bit pattern that tells libcurl exactly what features to init. (A $CURL_GLOBAL_* value.) ;                  $m                   - Callback for malloc, prototype: void *malloc_callback(size_t size); ;                  $f                   - Callback for free, prototype: void free_callback(void *ptr); ;                  $r                   - Callback for realloc, prototype: void *realloc_callback(void *ptr, size_t size); ;                  $s                   - Callback for strdup, prototype: char *strdup_callback(const char *str); ;                  $c                   - Callback for malloc, prototype: void *calloc_callback(size_t nmemb, size_t size); ; Return values .: Success - $CURLE_OK or an appropriate $CURLE_* error code will be returned. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: Manipulating these gives considerable powers to the application to severely screw things up for libcurl. Take care! ; Related .......: _curl_global_init, _curl_global_cleanup ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_global_init_mem.html">http://curl.haxx.se/libcurl/c/curl_global_init_mem.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_global_init_mem($flags, $m, $f, $r, $s, $c)     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "int:cdecl", "curl_global_init_mem", "long", $flags, "ptr", $m, "ptr", $f, "ptr", $r, "ptr", $s, "ptr", $c)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_global_init_mem ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_slist_append ; Description ...: Add a string to an slist ; Syntax ........: _curl_slist_append($list, $string) ; Parameters ....: $list                - A list pointer. ;                  $string              - A string value. ; Return values .: Success - A new list pointer. ;                  Failure - A null pointer or -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_slist_free_all ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_slist_append.html">http://curl.haxx.se/libcurl/c/curl_slist_append.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_slist_append($list, $string)     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "ptr:cdecl", "curl_slist_append", "ptr", $list, "str", $string)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_slist_append ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_slist_free_all ; Description ...: Free an entire curl_slist list ; Syntax ........: _curl_slist_free_all($list) ; Parameters ....: $list                - A list pointer. ; Return values .: Success - 1 ;                  Failure - 0, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_slist_append ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_slist_free_all.html">http://curl.haxx.se/libcurl/c/curl_slist_free_all.html</a> ; Example .......: Yes ; =============================================================================================================================== Func _curl_slist_free_all($list)     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, 0)     DllCall($g_hDll_libcurl, "none:cdecl", "curl_slist_free_all", "ptr", $list)     If @error Then Return SetError(2, @extended, 0)     Return 1 EndFunc   ;==>_curl_slist_free_all ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_version ; Description ...: Returns the libcurl version string ; Syntax ........: _curl_version() ; Parameters ....: None. ; Return values .: Success - A pointer to a zero terminated string. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_version_info ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_version.html">http://curl.haxx.se/libcurl/c/curl_version.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_version()     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, "")     Local $aRes = DllCall($g_hDll_libcurl, "str:cdecl", "curl_version")     If @error Then Return SetError(2, @extended, "")     Return $aRes[0] EndFunc   ;==>_curl_version ; #FUNCTION# ==================================================================================================================== ; Name ..........: _curl_version_info ; Description ...: Returns run-time libcurl version info ; Syntax ........: _curl_version_info($type) ; Parameters ....: $type                - The version of this functionality by the time you write your program. ; Return values .: Success - A pointer to a curl_version_info_data struct. ;                  Failure - -1, Sets @Error: ;                  |1 - DLL could not be opened. ;                  |2 - DllCall failed. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: _curl_version ; Link ..........: <a target="_blank" href="http://curl.haxx.se/libcurl/c/curl_version_info.html">http://curl.haxx.se/libcurl/c/curl_version_info.html</a> ; Example .......: No ; =============================================================================================================================== Func _curl_version_info($type)     If $g_hDll_libcurl == -1 Then __cURL_DllOpen()     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, -1)     Local $aRes = DllCall($g_hDll_libcurl, "ptr:cdecl", "curl_version_info", "int", $type)     If @error Then Return SetError(2, @extended, -1)     Return $aRes[0] EndFunc   ;==>_curl_version_info ; #INTERNAL_USE_ONLY# =========================================================================================================== ;__cURL_DllOpen ;__cURL_DllClose ; Name ..........: __cURL_DllOpen ; Description ...: Opens the libcurl DLL for use with this UDF library. ; Syntax ........: __cURL_DllOpen() ; Parameters ....: None. ; Return values .: Success - 1, Sets $g_hDll_libcurl to the DLL's handle. ;                  Failure - 0, Sets @Error: ;                  |1 - DLL could not be opened. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: __cURL_DllClose ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func __cURL_DllOpen()     $g_hDll_libcurl = DllOpen("libcurl.dll")     If $g_hDll_libcurl == -1 Then Return SetError(1, @extended, 0)     OnAutoItExitRegister("__cURL_DllClose")     Return 1 EndFunc   ;==>__cURL_DllOpen ; #INTERNAL_USE_ONLY# =========================================================================================================== ;__cURL_DllOpen ;__cURL_DllClose ; Name ..........: __cURL_DllClose ; Description ...: Closes a open handle to the libcurl DLL. ; Syntax ........: __cURL_DllClose() ; Parameters ....: None. ; Return values .: None. ; Author ........: smartee ; Modified ......: ; Remarks .......: ; Related .......: __cURL_DllOpen ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func __cURL_DllClose()     If $g_hDll_libcurl <> -1 Then DllClose($g_hDll_libcurl)     $g_hDll_libcurl = -1 EndFunc   ;==>__cURL_DllClose


Example 1: _curl_slist_append.au3
AutoIt         
#include <libcURL.au3> _Demo1() Func _Demo1()     Local $sURL = "http://www.google.com/search?q=http+headers"     Local $hcurl = _curl_easy_init()     If ($hcurl) Then         ; set referer         Local $ptNewList = _curl_slist_append(0, "Referer: http://www.google.com")         ; add a custom accept         $ptNewList = _curl_slist_append($ptNewList, "Accept: foo")         Local $tCURLSTRUCT_URL = DllStructCreate("char[" & StringLen($sURL) + 1 & "]")         DllStructSetData($tCURLSTRUCT_URL, 1, $sURL)         _curl_easy_setopt($hcurl, $CURLOPT_URL, DllStructGetPtr($tCURLSTRUCT_URL))         _curl_easy_setopt($hcurl, $CURLOPT_VERBOSE, 1)         _curl_easy_perform($hcurl)         ; redo request with our custom headers:         _curl_easy_setopt($hcurl, $CURLOPT_HTTPHEADER, $ptNewList)         _curl_easy_perform($hcurl)         _curl_slist_free_all($ptNewList)         _curl_easy_cleanup($hcurl)     EndIf EndFunc   ;==>_Demo1


TODO:
  • "multi" interface
  • "share" interface
Download:

LAST UPDATED: 06-APR-2012

Here's a zipped file with everything you need to get started, (Help-file with examples, calltips.api, userudfs.properties, current libcurl.dll (v7.25.0 & deps) etc.)
libcURLUDFv1.0.zip 1.09 MB Posted Image

All feedback is welcome ;)
-smartee
  • KaFu likes this







#2 UEZ

UEZ

    Never say never

  • MVPs
  • 5,079 posts

Posted 06 April 2012 - 11:12 AM

Hi smartee,

can you put the examples to a folder please? It would be much easier to access them rather than searching in the help file and doing a copy/paste.

Btw, it looks good, well coded and documented but I've to test some of the examples first.

Br,
UEZ

Edited by UEZ, 06 April 2012 - 11:13 AM.

 
The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯


#3 smartee

smartee

    Hippies.They're everywhere.

  • Active Members
  • PipPipPipPipPipPip
  • 661 posts

Posted 06 April 2012 - 11:31 AM

Thanks for taking a look UEZ, & done ;)

#4 UEZ

UEZ

    Never say never

  • MVPs
  • 5,079 posts

Posted 06 April 2012 - 11:32 AM

Thanks!

Br,
UEZ

 
The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯


#5 Rad

Rad

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 412 posts

Posted 04 May 2012 - 07:36 PM

As someone who rarely uses autoit and doesn't understand how DLL's work, this made it much easier. I have this working with form fields and files which is all I need, but I'm wondering how do you get the data returned (currently prints to console) in a variable?

The example "_curl_easy_getinfo.au3" requests an image, the return for that response is a bunch of binary data. I need everything after the "We recieved content-type: image/png" from this screenshot: http://screencast.com/t/NuIHoHRo920J

EDIT: The answer lies within the dllcallback functionality, it's accomplished here: http://www.autoitscript.com/forum/topic/137456-curl-udf-a-udf-for-transferring-data-with-url-syntax/

I do not have the ability to combine the two though.

Edited by Rad, 05 May 2012 - 08:32 AM.


#6 KaFu

KaFu

    Hey, it's just me, KhaFoo...

  • MVPs
  • 3,409 posts

Posted 05 May 2012 - 09:22 AM

Really nice to hav a libcURL UDF at hand, thanks a lot! I guess the poster before me refferes to the flag CURLOPT_RETURNTRANSFER, which I couldn't find in your const definitions.

#7 smartee

smartee

    Hippies.They're everywhere.

  • Active Members
  • PipPipPipPipPipPip
  • 661 posts

Posted 05 May 2012 - 01:14 PM

As someone who rarely uses autoit and doesn't understand how DLL's work, this made it much easier. I have this working with form fields and files which is all I need, but I'm wondering how do you get the data returned (currently prints to console) in a variable?

The example "_curl_easy_getinfo.au3" requests an image, the return for that response is a bunch of binary data. I need everything after the "We recieved content-type: image/png" from this screenshot: http://screencast.com/t/NuIHoHRo920J

EDIT: The answer lies within the dllcallback functionality, it's accomplished here: http://www.autoitscript.com/forum/topic/137456-curl-udf-a-udf-for-transferring-data-with-url-syntax/

I do not have the ability to combine the two though.


Hi, look at the example for _curl_easy_setopt in the included help-file, it shows how to save the output to a file using a DLL callback.

Really nice to hav a libcURL UDF at hand, thanks a lot! I guess the poster before me refferes to the flag CURLOPT_RETURNTRANSFER, which I couldn't find in your const definitions.

;) There is no CURLOPT_RETURNTRANSFER in libcurl C API, to get that effect you would need to make a callback function that simply writes to a variable, like seangriffin did.

#8 KaFu

KaFu

    Hey, it's just me, KhaFoo...

  • MVPs
  • 3,409 posts

Posted 05 May 2012 - 06:33 PM

;) There is no CURLOPT_RETURNTRANSFER in libcurl C API, to get that effect you would need to make a callback function that simply writes to a variable, like seangriffin did.

You're right :), CURLOPT_RETURNTRANSFER seems only to be valid for the php implementation, sorry for this one.

And to be plain clear, those not giving you 5 stars for this have really no clue what they're looking at.

Hi, look at the example for _curl_easy_setopt in the included help-file, it shows how to save the output to a file using a DLL callback.

Nice example, using a global callback buffer this can be used to store the data in a variable too.

AutoIt         
#include <libcURL.au3> Global $bCallbackBuffer _url2file("<a href='http://curl.haxx.se/ds-curlicon.png' class='bbc_url' title='External link' rel='nofollow external'>http://curl.haxx.se/ds-curlicon.png"</a>, "ds-curlicon.png") Func _url2file($sURL, $sFilePath)     Local $curl_handle = _curl_easy_init()     If ($curl_handle) Then         Local $tCURLSTRUCT_URL = DllStructCreate("char[" & StringLen($sURL) + 1 & "]")         DllStructSetData($tCURLSTRUCT_URL, 1, $sURL)         _curl_easy_setopt($curl_handle, $CURLOPT_URL, DllStructGetPtr($tCURLSTRUCT_URL))         _curl_easy_setopt($curl_handle, $CURLOPT_VERBOSE, 1)         _curl_easy_setopt($curl_handle, $CURLOPT_FOLLOWLOCATION, 1)         _curl_easy_setopt($curl_handle, $CURLOPT_NOPROGRESS, 1)         $bCallbackBuffer = ""         Local $handle = DllCallbackRegister("_my_fwrite", "uint:cdecl", "ptr;uint;uint;ptr")         _curl_easy_setopt($curl_handle, $CURLOPT_WRITEFUNCTION, DllCallbackGetPtr($handle))         ;Local $tCURLSTRUCT_WRITEDATA = DllStructCreate("int")         ;DllStructSetData($tCURLSTRUCT_WRITEDATA, 1, $fh)         _curl_easy_setopt($curl_handle, $CURLOPT_WRITEDATA, 0);DllStructGetPtr($tCURLSTRUCT_WRITEDATA))         _curl_easy_perform($curl_handle)         DllCallbackFree($handle)         _curl_easy_cleanup($curl_handle)         If $bCallbackBuffer Then             ConsoleWrite("+ $bCallbackBuffer: " & $bCallbackBuffer & @CRLF)             Local $fh = FileOpen($sFilePath, 18)             If $fh <> -1 Then                 FileWrite($fh, $bCallbackBuffer)                 FileClose($fh)             EndIf         EndIf     EndIf EndFunc   ;==>_url2file Func _my_fwrite($buffer, $size, $nmemb, $stream)     Local $vData = DllStructCreate("byte[" & $size * $nmemb & "]", $buffer)     ;Local $tWriteData = DllStructCreate("int", $stream)     ;FileWrite(DllStructGetData($tWriteData, 1), DllStructGetData($vData, 1))     $bCallbackBuffer &= DllStructGetData($vData, 1)     Return $size * $nmemb EndFunc   ;==>_my_fwrite

Edited by KaFu, 05 May 2012 - 06:43 PM.


#9 smartee

smartee

    Hippies.They're everywhere.

  • Active Members
  • PipPipPipPipPipPip
  • 661 posts

Posted 06 May 2012 - 01:48 AM

You're right ;), CURLOPT_RETURNTRANSFER seems only to be valid for the php implementation, sorry for this one.

And to be plain clear, those not giving you 5 stars for this have really no clue what they're looking at.

Nice example, using a global callback buffer this can be used to store the data in a variable too...


Thanks for the expert scrutiny and kind words :), I posted an example too in Rad's thread in General Help and Support http://www.autoitscript.com/forum/topic/140256-get-the-html-response-from-curl-stdoutread-with-a-dll-libcurl/page__view__findpost__p__985234 , quite similar actually :D

#10 Myicq

Myicq

    Universalist

  • Active Members
  • PipPipPipPipPip
  • 283 posts

Posted 07 January 2013 - 07:23 AM

I have looked at this project. It's certainly interesting and you have a LOT of good examples.

One question: is it a deliberate choice, or a necessary "evil" to have so many Dll-options in the functions ?
What I am hinting at is:
it's faily easy for "laymen" to understand something like

_curl_easy_setopt($hcurl, $CURLOPT_SOMETHING, $parameter)


But once you get to something like this, I can follow the example but probably not create my own.

    Local $tCURL_FORMADD = DllStructCreate("ptr;ptr;")     ; Fill in the file upload field     _curl_formadd(DllStructGetPtr($tCURL_FORMADD, 1), _             DllStructGetPtr($tCURL_FORMADD, 2), _             $CURLFORM_COPYNAME, "sendfile", _             $CURLFORM_FILE, "_curl_formadd.au3", _             $CURLFORM_END)


I compare this to binary version of curl, where (multi part) form fields can simply be stated like this
curl.exe -X POST  -F "file=@cooltext.txt" -F "yourname=Daniel" site.cgi or for simple post curl.exe -X POST -d "user=foobar&pass=12345" site.cgi


I am not all saying your UDF is bad - by far it's not :) - but just querious if a higher level version is / was considered ?

Hope I am not "gravedigging" by responding to a 7 month old post.

#11 Tjalve

Tjalve

    Polymath

  • Active Members
  • PipPipPipPip
  • 222 posts

Posted 16 December 2013 - 06:13 PM

Hi there!

Im trying to use this UDF to download a regular HTTP file (for testing) but i cant get it to work. If i run the example, i get a "success" message, but there are no file to be found. I also tried the _url2file function here. Now i get a file, but the file is corupted and cannot be used.

It works great with the precompiled version


Edited by Tjalve, 16 December 2013 - 06:18 PM.


#12 Graeme

Graeme

    Wayfarer

  • Active Members
  • Pip
  • 50 posts

Posted 30 January 2014 - 05:41 PM

Hi,

 

Looks impressive but I'm a bit puzzled. It says that it works with FTPS etc etc but I see no mention anywhere of ceritficates or passwords or usernames....

 

How can I get a file from a secure site without those?

Blessings



#13 wakillon

wakillon

    Tiny Tools Coder

  • Active Members
  • PipPipPipPipPipPip
  • 2,935 posts

Posted 30 January 2014 - 06:46 PM

Hi,

 

Looks impressive but I'm a bit puzzled. It says that it works with FTPS etc etc but I see no mention anywhere of ceritficates or passwords or usernames....

 

How can I get a file from a secure site without those?

Blessings

 

Search for $CURLOPT_USERPWD


       AutoIt Version : 3.3.12.0 / Beta 3.3.13.19 SciTE 3.4.1 OS:WIN7/WIN8.1 CPU:X64 OS:X64


#14 Graeme

Graeme

    Wayfarer

  • Active Members
  • Pip
  • 50 posts

Posted 01 February 2014 - 05:11 PM

I found it - Thanks for that. Still trying to get it to work - there seem to be a lot of opts to set - the actual downloading seems to be curl_easy_perform($url)

 

Is that right? How is this different from FTP? How do I force it to go over SSL? As you can see I'm very new to this.:(

 

Have a good day

Blessings

Graeme



#15 Graeme

Graeme

    Wayfarer

  • Active Members
  • Pip
  • 50 posts

Posted 03 February 2014 - 05:37 PM

This is kind of embarrassing but I just tried the example files that came with LibCurl.au3 and they don't seem to work. Is there a reason for this?

 

I tried curl_easy_getinfo and curl_easy_setopt. The second one resulted in an empty file being created.??



#16 TechCoder

TechCoder

    Prodigy

  • Active Members
  • PipPipPip
  • 185 posts

Posted 09 March 2014 - 09:38 PM

I'm lost on this one........

 

What I NEED is to have cURL work with CUSTOMREQUEST headers as I need to have DELETE as an option - as stated in if anyone knows how to do this any other way, I am open to hear that!)

 

I've used cURL in php a few times and it always has been fast and worked first time.

 

But, using this UDF, I have been fighting this thing all day and getting nowhere....

 

EDIT: Test Bed removed (as this was resolved)

 

here's the php 

Plain Text         
<html> <form method="post"> Enter 1 for CURLOPT_POST (Standard) or anything else for CURLOPT_CUSTOMREQUEST (Custom) <br> <input type="text" name="testit" value="1"> <input type="submit" name="submit" value="submit"> </form> <?php $user = "AutoItuser"; $pass = "AutoItuser"; $testit = $_REQUEST['testit']; $sURL = "http://example.com/test/Booked/Web/Services/Authentication/Authenticate"; $body = '{"username":"' . $user . '","password":"' . $pass . '"}'; $header_type = "POST"; $hcurl = curl_init(); echo "body is $body<br>"; if ($hcurl) {     //setup the URL     curl_setopt($hcurl, CURLOPT_URL, $sURL);     //set up for output of callback     curl_setopt($hcurl, CURLOPT_RETURNTRANSFER, true); echo "testit is $testit<br>";         If ($testit == '1') // STANDARD         {             echo "working with STANDARD options<br>";             curl_setopt($hcurl, CURLOPT_POST, true);         }         Else // using CUSTOM         {             echo "working with CUSTOM options<br>";             curl_setopt($hcurl, CURLOPT_CUSTOMREQUEST, $header_type);         }         curl_setopt($hcurl, CURLOPT_POSTFIELDS, $body);     // grab URL and pass it to the browser     $reply = curl_exec($hcurl);     echo __LINE__ . " this is the reply we got from curl_exec ==>>$reply<<==<br><br>";     // close cURL resource, and free up system resources     curl_close($hcurl); }   ?>

That works - in both methods

 

Now, the 'same' code, in AutoIt.....

AutoIt         
#include <libcURL.au3> Global $bMyData = Binary("") _Demo1() Func _Demo1()     Local $user = "AutoItuser"     Local $pass = "AutoItuser"     Local $testit = InputBox("SELECT", "Enter 1 for 'CURLOPT_POST as in php'" & @CRLF & "2 for 'CUSTOMREQUEST as works in php'" & @CRLF & "or anything else for 'best AutoIt so far'", 1)     Local $sURL = "http://example.com/test/Booked/Web/Services/Authentication/Authenticate"     Local $body = '{"username":"' & $user & '","password":"' & $pass & '"}'     Local $header_type = "POST"     Local $hcurl = _curl_easy_init()     ConsoleWrite("body is " & $body & @CRLF)     If ($hcurl) Then         ; setup the URL         Local $tCURLSTRUCT_URL = DllStructCreate("char[" & StringLen($sURL) + 1 & "]")         DllStructSetData($tCURLSTRUCT_URL, 1, $sURL)         _curl_easy_setopt($hcurl, $CURLOPT_URL, DllStructGetPtr($tCURLSTRUCT_URL))         ; set up for output of callback         Local $handle = DllCallbackRegister("_my_vwrite", "uint:cdecl", "ptr;uint;uint;ptr")         _curl_easy_setopt($hcurl, $CURLOPT_WRITEFUNCTION, DllCallbackGetPtr($handle))         _curl_easy_setopt($hcurl, $CURLOPT_VERBOSE, 1)         If $testit = 1 Then ; STANDARD POST             _curl_easy_setopt($hcurl, $CURLOPT_POST, True);             _curl_easy_setopt($hcurl, $CURLOPT_POSTFIELDS, $body);         ElseIf $testit = 2 Then ; using             _curl_easy_setopt($hcurl, $CURLOPT_CUSTOMREQUEST, $header_type);             _curl_easy_setopt($hcurl, $CURLOPT_POSTFIELDS, $body);         Else             _curl_easy_setopt($hcurl, $CURLOPT_HTTPPOST, $body);         EndIf         Local $iRes = _curl_easy_perform($hcurl)         If $iRes > $CURLE_OK Then             ConsoleWrite("!CURL; " & _curl_easy_strerror($iRes) & @CRLF)         ElseIf $iRes = $CURLE_OK Then             ConsoleWrite("+>CURL; Success!" & @CRLF)             Local $sContentType             $iRes = _curl_easy_getinfo($hcurl, $CURLINFO_CONTENT_TYPE, $sContentType);             If $iRes = $CURLE_OK Then                 ConsoleWrite("+>CURL; We received Content-Type: " & $sContentType & @CRLF);                 $reply = BinaryToString($bMyData)                 ConsoleWrite(@ScriptLineNumber & " " & " this is the reply we got =>>" & @CRLF & $reply & @CRLF & "<<=" & @CRLF)             EndIf         EndIf         _curl_easy_cleanup($hcurl)     EndIf EndFunc   ;==>_Demo1 Func _my_vwrite($buffer, $size, $nmemb, $stream)     Local $vData = DllStructCreate("byte[" & $size * $nmemb & "]", $buffer)     $bMyData &= DllStructGetData($vData, 1)     Return $size * $nmemb EndFunc   ;==>_my_vwrite

To document everything I've tried through the day would take pages, so I'll let this code stand on its own- it is the 'best' so far to use

_curl_easy_setopt($hcurl, $CURLOPT_HTTPPOST, $body);

 though it is not working (still not getting authenticated) but is the only function I have found that yields ANY result other than errors.....

 

This is one of those 'weekend projects' I took on that has turned into 20-something hours since Friday afternoon and still hasn't gotten off the ground!   ;)


Edited by TechCoder, 17 March 2014 - 12:19 PM.


#17 KyS

KyS

    Seeker

  • New Members
  • 1 posts

Posted 17 March 2014 - 04:22 AM

@TechCoder,

im no expert, but it seems like you should pass pointers to strings to those functions, I fiddled around mainly since you bothered to to put up a testing page and this seems to work :

AutoIt         
#include <libcURL.au3> Global $bMyData = Binary("") _Demo1() Func _Demo1()  Local $user = "AutoItuser"  Local $pass = "AutoItuser"  Local $testit = InputBox("SELECT", "Enter 1 for 'CURLOPT_POST as in php'" & @CRLF & "2 for 'CUSTOMREQUEST as works in php'" & @CRLF & "or anything else for 'best AutoIt so far'", 1)  Local $sURL = "http://cashflowproducts.com/test/Booked/Web/Services/Authentication/Authenticate"  Local $body = '{"username":"' & $user & '","password":"' & $pass & '"}'  Local $header_type = "POST"  Local $hcurl = _curl_easy_init()  ConsoleWrite("body is " & $body & @CRLF)  If($hcurl) Then   ; setup the URL   Local $tCURLSTRUCT_URL = DllStructCreate("char[" & StringLen($sURL) + 1 & "]")   DllStructSetData($tCURLSTRUCT_URL, 1, $sURL)   _curl_easy_setopt($hcurl, $CURLOPT_URL, DllStructGetPtr($tCURLSTRUCT_URL))   ; set up for output of callback   Local $handle = DllCallbackRegister("_my_vwrite", "uint:cdecl", "ptr;uint;uint;ptr")   _curl_easy_setopt($hcurl, $CURLOPT_WRITEFUNCTION, DllCallbackGetPtr($handle))   Local $tbody = DllStructCreate("char[" & StringLen($body) + 1 & "]")   DllStructSetData($tbody, 1, $body)   Local $theader_type= DllStructCreate("char[" & StringLen($header_type) + 1 & "]")   DllStructSetData($theader_type, 1, $header_type)   _curl_easy_setopt($hcurl, $CURLOPT_VERBOSE, 1)   If $testit = 1 Then ; STANDARD POST    _curl_easy_setopt($hcurl, $CURLOPT_POST, True);    _curl_easy_setopt($hcurl, $CURLOPT_COPYPOSTFIELDS, DllStructGetPtr($tbody));   ElseIf $testit = 2 Then ; using    _curl_easy_setopt($hcurl, $CURLOPT_CUSTOMREQUEST, DllStructGetPtr($theader_type));    _curl_easy_setopt($hcurl, $CURLOPT_COPYPOSTFIELDS, DllStructGetPtr($tbody));   Else    _curl_easy_setopt($hcurl, $CURLOPT_HTTPPOST, $body);   EndIf   Local $iRes = _curl_easy_perform($hcurl)   If $iRes > $CURLE_OK Then    ConsoleWrite("!CURL; " & _curl_easy_strerror($iRes) & @CRLF)   ElseIf $iRes = $CURLE_OK Then    ConsoleWrite("+>CURL; Success!" & @CRLF)    Local $sContentType    $iRes = _curl_easy_getinfo($hcurl, $CURLINFO_CONTENT_TYPE, $sContentType);    If $iRes = $CURLE_OK Then     ConsoleWrite("+>CURL; We received Content-Type: " & $sContentType & @CRLF);     $reply = BinaryToString($bMyData)     ConsoleWrite(@ScriptLineNumber & " " & " this is the reply we got =>>" & @CRLF & $reply & @CRLF & "<<=" & @CRLF)    EndIf   EndIf   _curl_easy_cleanup($hcurl)  EndIf EndFunc   ;==>_Demo1 Func _my_vwrite($buffer, $size, $nmemb, $stream)  Local $vData = DllStructCreate("byte[" & $size * $nmemb & "]", $buffer)  $bMyData &= DllStructGetData($vData, 1)  Return $size * $nmemb EndFunc   ;==>_my_vwrite

  • TechCoder likes this

#18 TechCoder

TechCoder

    Prodigy

  • Active Members
  • PipPipPip
  • 185 posts

Posted 17 March 2014 - 12:14 PM

KyS,

 

Thanks for messing with it - works great!  And, what a fantastic first post!  Welcome to this forum!

 

I am using AutoIt a lot, though these Dll things have me stumped (seems way too complicated to me..) - I see what you did and will learn from it.  I'm actually working with another section that also uses dlls - perhaps this will work there as well (if not, be looking on the forum for my post about that...... - great to have this resource when you really get stuck!)

 

Thanks again.



#19 TheTechnoMan

TheTechnoMan

    Seeker

  • Normal Members
  • 9 posts

Posted 04 June 2014 - 11:50 AM

Hey,

 

thanks you very much for this awesome UDF. Sadly it crashes when i set:

_curl_easy_setopt($hcurl, $CURLOPT_PROXY, '123.456.78.90:3128')

Any idea why?

 

Crash Information: msvcrt.dll - Error Code: c0000005

 

Thanks


Edited by TheTechnoMan, 04 June 2014 - 12:14 PM.






Also tagged with one or more of these keywords: libcurl, dll, upload, download

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users