Sign in to follow this  
Followers 0

libcURL UDF - the multiprotocol file transfer library


19 posts in this topic

Posted

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:

; #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

#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

#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

#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

Share this post


Link to post
Share on other sites



Posted (edited)

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

Share this post


Link to post
Share on other sites

Posted

Thanks for taking a look UEZ, & done ;)

Share this post


Link to post
Share on other sites

Posted

Thanks!

Br,

UEZ

Share this post


Link to post
Share on other sites

Posted (edited)

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:

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

Edited by Rad

Share this post


Link to post
Share on other sites

Posted

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.

Share this post


Link to post
Share on other sites

Posted

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:

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.

Share this post


Link to post
Share on other sites

Posted (edited)

;) 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.

#include <libcURL.au3>

Global $bCallbackBuffer

_url2file("http://curl.haxx.se/ds-curlicon.png", "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

Share this post


Link to post
Share on other sites

Posted

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 , quite similar actually :D

Share this post


Link to post
Share on other sites

Posted

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.

Share this post


Link to post
Share on other sites

Posted (edited)

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

Share this post


Link to post
Share on other sites

Posted

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

Share this post


Link to post
Share on other sites

Posted

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

Share this post


Link to post
Share on other sites

Posted

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

Share this post


Link to post
Share on other sites

Posted

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.??

Share this post


Link to post
Share on other sites

Posted (edited)

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 

<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.....

#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

Share this post


Link to post
Share on other sites

Posted

@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 :

#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

Share this post


Link to post
Share on other sites

Posted

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.

Share this post


Link to post
Share on other sites

Posted (edited)

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0