Sign in to follow this  
Followers 0
smartee

libcURL UDF - the multiprotocol file transfer library

19 posts in this topic

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

1 person likes this

Share this post


Link to post
Share on other sites



#2 ·  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

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

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

Share this post


Link to post
Share on other sites

Thanks for taking a look UEZ, & done ;)

Share this post


Link to post
Share on other sites

Thanks!

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

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

Share this post


Link to post
Share on other sites

#5 ·  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

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

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

#8 ·  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

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

#10 ·  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.


I am just a hobby programmer, and nothing great to publish right now.

Share this post


Link to post
Share on other sites

#11 ·  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

#12 ·  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

#13 ·  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


AutoIt 3.3.14.2 X86 - SciTE 3.6.0WIN 8.1 X64 - Other Example Scripts

Share this post


Link to post
Share on other sites

#14 ·  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

#15 ·  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

#16 ·  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

#17 ·  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
1 person likes this

Share this post


Link to post
Share on other sites

#18 ·  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

#19 ·  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

  • Similar Content

    • Wicked_Caty
      DLL tutorial
      By Wicked_Caty
      I finally gave a look into DLLs and want to make use of them in Autoit.
      I know that a DLL is basically a library with some code, that can be used by several other programs at the same time to get some advantages.
      Yet, I need to know how they are properly used. Also it might be helpful to know what DLL is doing what task. Can you provide some resources?
      Thanks!
    • rm4453
      Script Freezes at Img Upload
      By rm4453
      I need to find a way to cick a file Browse button on a website and then upload an image that was previously selected by the user via an Autoit gui... (as you will see I am assigning $imUpload the file path via guictrlread for each of the selected Images....
      It will do just fine going though the submission process until it gets to this image upload page. When it gets to this page it will open the file upload box (here is a pic of it being opened by the autoit script: http://snag.gy/171RS.jpg
      As you can clearly see it opens the image upload box just fine however it does not send the file path via  Send($imUp1)  "here is a pic of the msgbox that is showing me it did grab the right file path for the image:
      However that msgbox doesn't show up unless I close the file upload box... so that is where the code freezup has been narrowed down to... I have tried to be as specific as possible if there is anymore info I can provide that would be usefull please let me know
       
      Here is what I have so far code wise... (i know its hack/slash im new to guis and autoit coding sorry for the eyehurt) *any commented lines of code I have tried but couldn't get them to work... the uncommented lines get the farthest out of them all*
       
      Do $imUpload = $imUploadCount + 1 If $ImageCount >= 6 Then $ImageCount = 6 EndIf $oForm = _IEFormGetObjByName($ksl, "f-142") $oInputFile = _IEFormElementGetObjByName($oForm, "142") ;Assign input focus To the field And Then send the text string ;_IEAction($oInputFile, "focus") ;$iBrowserX = _IEPropertyGet($oInputFile, "browserx") ;$iBrowserY = _IEPropertyGet($oInputFile, "browsery") ;$iWidth = _IEPropertyGet($oInputFile, "width") ;$iHeight = _IEPropertyGet($oInputFile, "height") ;ControlClick(_IEPropertyGet($ksl, "hwnd"), "", "", "left", 1, $iBrowserX + $iWidth / 2, $iBrowserY + $iHeight / 2) _IEAction($oInputFile, "click") ;$oInputFile = _IELinkGetCollection($ksl, 142) ;$oInputFile.fireEvent("onmouseup") ;$oInputFile.click If $imUpload = 1 Then $imUp1 = GUICtrlRead($Image1) Sleep(1500) ElseIf $imUpload = 2 Then $imUp1 = GUICtrlRead($Image2) Sleep(1500) ElseIf $imUpload = 3 Then $imUp1 = GUICtrlRead($Image3) Sleep(1500) ElseIf $imUpload = 4 Then $imUp1 = GUICtrlRead($Image4) Sleep(1500) ElseIf $imUpload = 5 Then $imUp1 = GUICtrlRead($Image5) Sleep(1500) ElseIf $imUpload = 6 Then $imUp1 = GUICtrlRead($Image6) Sleep(1500) EndIf MsgBox("MSG", "$imUp1", $imUp1) Send($imUp1) Sleep(1500) Send("{ENTER}") ;Find Image Description field! $descriptionimfield = _IEGetObjById($ksl, "d-142") If Not @error Then ; MsgBox("Success", "Email Input Found", "Next Step!") Else ;MsgBox("Failed", "Email Input Not Found", "Try Again!") Exit EndIf ;Fill Image Description(s) field! If $imUpload = 1 Then _IEFormElementSetValue($descriptionimfield, $Image1_Description) If Not @error Then ; MsgBox("Success", "Email Input Filled", "Next Step!") Else ;MsgBox("Failed", "Email Input Not Filled", "Try Again!") Exit EndIf ElseIf $imUpload = 2 Then _IEFormElementSetValue($descriptionimfield, $Image2_Description) If Not @error Then ; MsgBox("Success", "Email Input Filled", "Next Step!") Else ;MsgBox("Failed", "Email Input Not Filled", "Try Again!") Exit EndIf ElseIf $imUpload = 3 Then _IEFormElementSetValue($descriptionimfield, $Image3_Description) If Not @error Then ; MsgBox("Success", "Email Input Filled", "Next Step!") Else ;MsgBox("Failed", "Email Input Not Filled", "Try Again!") Exit EndIf ElseIf $imUpload = 4 Then _IEFormElementSetValue($descriptionimfield, $Image4_Description) If Not @error Then ; MsgBox("Success", "Email Input Filled", "Next Step!") Else ;MsgBox("Failed", "Email Input Not Filled", "Try Again!") Exit EndIf ElseIf $imUpload = 5 Then _IEFormElementSetValue($descriptionimfield, $Image5_Description) If Not @error Then ; MsgBox("Success", "Email Input Filled", "Next Step!") Else ;MsgBox("Failed", "Email Input Not Filled", "Try Again!") Exit EndIf ElseIf $imUpload = 6 Then _IEFormElementSetValue($descriptionimfield, $Image6_Description) If Not @error Then ; MsgBox("Success", "Email Input Filled", "Next Step!") Else ;MsgBox("Failed", "Email Input Not Filled", "Try Again!") Exit EndIf EndIf ;Go to Next page! $oButtons = _IETagNameGetCollection($ksl, "input") For $oButton In $oButtons If String($oButton.value) = "Upload File" Then _IEAction($oButton, "click") ;MsgBox("Success", "Login Successful!", "Login Credentials Verified!") ExitLoop Else EndIf Next Sleep(2000) Until $imUpload >= $ImageCount  
      Here is a picture of the webpage that I am interacting with in IE: http://snag.gy/7hQ4y.jpg
       
      Here is the webpage code:
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=8" /> <!-- template-beta --> <script type="text/javascript"> var xdbt_start = (new Date()).getTime(); </script> <!-- <script src="/scripts/search.js" language="javascript" type="text/javascript"></script> --> <title>Place a FREE Classified Ad | ksl.com</title> <meta property="og:title" content="Place a FREE Classified Ad | ksl.com" /> <meta name="keywords" content="news, traffic, weather, sports, classifieds, cars, jobs, homes, television, radio, salt lake, utah, local" /> <meta name="description" content="The KSL.COM Website" /> <meta name="publication_date" content="2005-07-31" /> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="Content-Language" content="en-us" /> <meta http-equiv="imagetoolbar" content="no" /> <meta name="verify-v1" content="Hfa7cDQ0+6irKfA233lorv0N2hQ99FyQwAkFAkWMk+U=" /> <meta property="og:image" content="" /> <meta property="og:type" content="article" /> <meta name="author" content="" /> <meta property="og:article:author" content="" /> <meta name="Copyright" content="Copyright (c) KSL.COM" /> <meta name="robots" content="all" /> <meta name="MSSmartTagsPreventParsing" content="true" /> <meta name="Rating" content="General" /> <meta name="revisit-after" content="1 Day" /> <meta name="doc-class" content="Living Document" /> <style type="text/css" media="screen">@import "/templates/template-v3.css";</style> <style type="text/css" media="screen">@import "/templates/navPopOver.css";</style> <script type="text/javascript" src="/packages/jquery/jquery-1.7.min.js"></script> <script type="text/javascript" src="/packages/jquery/bgiframe-2.1.1.js"></script> <script type="text/javascript" src="/packages/jquery/dimensions-1.2.0.js"></script> <script type="text/javascript" src="/packages/jquery-ui/jquery-ui-1.8.16.custom.min.js"></script> <!-- <script type="text/javascript" src="/javascript/popOverMenu.js"></script> --> <!-- <script type="text/javascript" src="/javascript/tvRadioPopOver.js"></script> --> <style type="text/css" media="projection">@import "/templates/template-v3.css";</style> <link rel="canonical" href="http://www.ksl.com/?nid=640&sid=4516794" /> <meta property="og:url" content="http://www.ksl.com/?nid=640&sid=4516794" /> <link rel="apple-touch-icon" href="apple-touch-icon.png" /> <link rel="stylesheet" media="only screen and (max-device-width:480px)" href="/templates/navPopOver.css" type="text/css" /> <link rel="stylesheet" media="screen and (min-device-width:481 px)" href="/templates/navPopOver.css" /> <link type="text/css" rel="stylesheet" media="print" href="/templates/navPopOver.css" /> <link type="text/css" rel="stylesheet" media="handheld" href="/templates/navPopOver.css" /> <link type="text/css" rel="alternate stylesheet" href="/templates/navPopOver.css" title = "mobile"/> <link rel="stylesheet" media="only screen and (max-device-width:480px)" href="/templates/template-v3.css" type="text/css" /> <link rel="stylesheet" media="screen and (min-device-width:481 px)" href="/templates/template-v3.css" /> <link type="text/css" rel="stylesheet" media="print" href="/templates/template-v3.css" /> <link type="text/css" rel="stylesheet" media="handheld" href="/templates/template-v3.css" /> <link type="text/css" rel="alternate stylesheet" href="/templates/template-v3.css" title = "mobile"/> <link type="image/x-icon" rel="Shortcut Icon" href="/favicon.ico" /> <link rel="help" href="/about.php" title="Site info" /> <script type="text/javascript"> function openMenu(mid) { document.getElementById(mid).style.display = 'block'; } function openScript(url, width, height) { var Win = window.open(url,"openScript",'width=' + width + ',height=' + height + ',resizable=yes,scrollbars=yes,menubar=no,status=yes' ); } function logondemand(action) { document.getElementById('onDemandback').src = "http://tools.bonnint.net/ondemandlogger.php?action=" + action; } var init_object = new Object; $(document).ready( function() { for (var i_func in init_object) { init_object[i_func](); } }); </script> <!-- Make Dropdowns work on iPad --> <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { if(navigator.platform == "iPad") { $("a").each(function() { // have to use an `each` here - either a jQuery `each` or a `for(...)` loop var onClick; // this will be a function var firstClick = function() { onClick = secondClick; return false; }; var secondClick = function() { onClick = firstClick; return true; }; onClick = firstClick; $(this).click(function() { return onClick(); }); }); } }); </script> --> <!-- End Make Dropdowns work on iPad --> <script type="text/javascript"> var _user_id = 2566029; // IMPORTANT! Set to the user's ID, username, or email address, or '' if not yet known. var _session_id = '0e98c75518605de0b498139d5d5f1c1e'; // Set to a unique session ID for the visitor's current browsing session. var _sift = _sift || []; _sift.push(['_setAccount', "46e0e4c3e4"]); _sift.push(['_setUserId', _user_id]); _sift.push(['_setSessionId', _session_id]); _sift.push(['_trackPageview']); (function() { function ls() { var e = document.createElement('script'); e.type = 'text/javascript'; e.async = true; e.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'cdn.siftscience.com/s.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(e, s); } if (window.attachEvent) { window.attachEvent('onload', ls); } else { window.addEventListener('load', ls, false); } })(); </script> </head> <body > <script type="text/javascript"> $(document).ready(function(){ $('#adTakeOverLeft, #adTakeOverRight').each(function(){ var elem = $(this); var top = elem.offset().top; if ($(window).scrollTop() > top) { elem.animate({ top: $(window).scrollTop() }, 500); } $(window).scroll(function(){ var offset = top - $(window).scrollTop(); offset = (offset > 0) ? offset : 0; elem.stop(true).css({ top: offset, position: 'fixed' }); }); }); }); </script> <style> #adTakeOverLeft, #adTakeOverRight { position: absolute; /* set to fixed in js */ top: 143px; margin:0; width:200px; overflow:visible; } #adTakeOverLeft { left: 50%; margin:0 0 0 -712px; *margin:0 0 0 -1024px; text-align:right; } #adTakeOverRight { right: 50%; margin: 0 -712px 0 0; text-align:left; } .adTakeOverInner img { border:0; } .adTakeOverInner a:link, .adTakeOverInner a:visited, .adTakeOverInner a:hover { text-decoration: none; } #adTakeOverLeft .adTakeOverInner { float:right; } #adTakeOverRight .adTakeOverInner { float:left; } /* @todo: delete this #mainoutsideBlock { background:gray; } #mainBlock { background:silver; } #bodyBlock { background:tan; } */ </style> <div id="adTakeOverLeft"> <div class="adTakeOverInner"> <!-- <img src="http://s0.2mdn.net/viewad/3065301/AFCU_Auto_300x600_2_13_12.jpg" /> --> <!-- <img src="/graphics/takeover_left.jpg" /> --> </div> </div> <div id="adTakeOverRight"> <div class="adTakeOverInner"> <!-- <img src="http://s0.2mdn.net/viewad/3065301/AFCU_Auto_300x600_2_13_12.jpg" /> --> <!-- <img src="/graphics/takeover_right.jpg" /> --> </div> </div> <style> #navMenu a.active { text-decoration: underline; } #headMenu a:hover { background: #b1cdff !important; border-radius: 2px 2px 0px 0px !important; /* top left, top right, bottom right, bottom left */ -webkit-border-radius: 2px 2px 0px 0px !important; -moz-border-radius: 2px 2px 0px 0px !important; } #headMenu a:hover img { background-color: #b1cdff !important; border-radius: 2px 2px 0px 0px !important; /* top left, top right, bottom right, bottom left */ -webkit-border-radius: 2px 2px 0px 0px !important; -moz-border-radius: 2px 2px 0px 0px !important; } #navBlock { background: rgb(177, 205, 255) !important; /* Old browsers */ background: -moz-linear-gradient(top, rgba(177, 205, 255, 1) 0%, rgba(153, 190, 255, 1) 47%, rgba(140, 182, 255, 1) 100%) !important;; /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(177, 205, 255, 1)), color-stop(47%, rgba(153, 190, 255, 1)), color-stop(100%, rgba(140, 182, 255, 1))) !important; /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, rgba(177, 205, 255, 1) 0%, rgba(153, 190, 255, 1) 47%, rgba(140, 182, 255, 1) 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, rgba(177, 205, 255, 1) 0%, rgba(153, 190, 255, 1) 47%, rgba(140, 182, 255, 1) 100%) !important; /* Opera 11.10+ */ background: -ms-linear-gradient(top, rgba(177, 205, 255, 1) 0%, rgba(153, 190, 255, 1) 47%, rgba(140, 182, 255, 1) 100%) !important; /* IE10+ */ background: linear-gradient(to bottom, rgba(177, 205, 255, 1) 0%, rgba(153, 190, 255, 1) 47%, rgba(140, 182, 255, 1) 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b1cdff', endColorstr='#8cb6ff', GradientType=0); /* IE6-9 */ box-shadow: 0 5px 9px -6px #888 !important; border-radius: 0px 0px 2px 2px; /* top left, top right, bottom right, bottom left */ -webkit-border-radius: 0px 0px 2px 2px; -moz-border-radius: 0px 0px 2px 2px; } #headMenu .on, #headMenu .Homeon { background-color: #b1cdff !important; border-radius: 2px 2px 0px 0px !important; /* top left, top right, bottom right, bottom left */ -webkit-border-radius: 2px 2px 0px 0px !important; -moz-border-radius: 2px 2px 0px 0px !important; } .on-sticky { background: #b1cdff !important; float: left; height: 34px; background-image: none; background-repeat: no-repeat; background-position: 0px 20px; margin: 0; padding: 0; border-radius: 2px 2px 0px 0px !important; /* top left, top right, bottom right, bottom left */ -webkit-border-radius: 2px 2px 0px 0px !important; -moz-border-radius: 2px 2px 0px 0px !important; } .on-sticky a { font-weight: bold; color: #0c162f !important; padding: 10px 5px 11px 5px; } #headMenu li.off.on { background: #b1cdff url('http://static.ksl.com/header/header_graphics/home-button_on.png') 0 7px no-repeat; } #headMenu li.off.on img { visibility: hidden; } </style> <script type="text/javascript"> var kslHeaderMeta = { kslLinkPrefix: '/' }; </script> <!-- <script type="text/javascript" src="//static.ksl.com/header/header_includes/popOverMenu.js?cachebust=2"></script> --> <script type="text/javascript" src="//static.ksl.com/header/header_includes/tvRadioPopOver.js?cachebust=2"></script> <style type="text/css" media="screen">@import "//static.ksl.com/header/header_includes/navPopOver.css";</style> <style> #headBlock .bottom { height: 34px !important; } </style> <style type="text/css" media="screen">@import "//static.ksl.com/header/header.css";</style> <link rel="stylesheet" media="only screen and (max-device-width:480px)" href="//static.ksl.com/header/header_includes/navPopOver.css" type="text/css" /> <link rel="stylesheet" media="screen and (min-device-width:481 px)" href="//static.ksl.com/header/header_includes/navPopOver.css" /> <link type="text/css" rel="stylesheet" media="print" href="//static.ksl.com/header/header_includes/navPopOver.css" /> <link type="text/css" rel="stylesheet" media="handheld" href="//static.ksl.com/header/header_includes/navPopOver.css" /> <link type="text/css" rel="alternate stylesheet" href="//static.ksl.com/header/header_includes/navPopOver.css" title = "mobile"/> <!-- empty div for popOver --> <div id="tvRadioWindow"></div> <div id="headBlock"> <div class="Channels" data-vr-zone="HP Channels"> <span class="utility"> <span class="utility-login"><span class="utility-login-loggedin"><a href="/public/member/home" data-vr-contentbox="account details" title="View account details">Hello rm4453</a>&nbsp;|&nbsp;<a href="https://www.ksl.com/public/member/logout?login_forward=%2Findex.php%3Fnid%3D640%26form_3%3D16%26form_4%3D467" data-vr-contentbox="logout" title="Logout of ksl.com">Logout</a></span></span>&nbsp;&nbsp; <a href="//www.ksl.com/?sid=15956469&nid=322" data-vr-contentbox="" title="Leave feedback about your experience">Feedback</a>&nbsp;&nbsp; <a href="//www.ksl.com/index.php?nid=205" data-vr-contentbox="" title="Contact KSL Customer Support">Contact Us</a> </span> <!-- end utility --> <div style="float: left;" class="tvRadioPopOver" nid="15"> <a href="/?nid=15" data-vr-contentbox="KSL TV" alt="KSL TV">KSL TV</a>&nbsp; </div> <div style="float: left;"> <img style="margin-top: 3px; float: left; display: block;" src="//static.ksl.com/header/header_graphics/downArrow.png" border=0/>&nbsp;&nbsp;&nbsp; </div> <div style="float: left;" class="tvRadioPopOver" nid="16"> <a href="/?nid=16" alt="KSL Newsradio" data-vr-contentbox="KSL Newsradio">KSL Newsradio</a>&nbsp; </div> <div style="float: left;"> <img style="margin-top: 3px; float: left; display: block;" src="//static.ksl.com/header/header_graphics/downArrow.png" border=0/>&nbsp;&nbsp;&nbsp; </div> <div style="float: left;"> <a href="http://live.ksl.com/scheduler/embed-view" alt="KSL Mobile" style="color: #fff;" data-vr-contentbox="KSL Live">KSL Live!</a>&nbsp; </div> <div style="float: left;">&nbsp;&nbsp;&nbsp;</div> <div style="float: left;"> <a href="/?nid=1114" alt="KSL SHows" style="color: #fff;" data-vr-contentbox="KSL Shows">KSL Shows</a>&nbsp; </div> <div style="float: left;">&nbsp;&nbsp;&nbsp;</div> <div style="float: left;"> <a href="/?nid=1072" alt="iWitness" style="color: #fff;" data-vr-contentbox="iWitness">iWitness</a>&nbsp; </div> <div style="float: left;">&nbsp;&nbsp;&nbsp;</div> <div style="float: left;"> <a href="/?sid=17920249&nid=250" alt="KSL Mobile" style="color: #fff;" data-vr-contentbox="Mobile">Mobile</a>&nbsp; </div> <div style="float: left;"></div> </div> <!-- Channels --> <div class="middle"> <div class="logo"> <a href="/index.php?nid=210"><img src="//static.ksl.com/header/header_graphics/logo.png" border=0></a> </div> <!-- WX box --> <div class="titleBox"> <a href="/index.php?nid=13"><font style="color: #fff; font-size: 36px;"> &nbsp;&raquo;&nbsp;Classifieds</font></a> </div> <!-- End of WX box --> <!-- Search box --> <!-- Temporary JS to get search working --> <script type="text/javascript"> function selectSearch() { var searchMethod = $("#search_select").val(); var searchKeyword = $("#search_keyword").val(); if (searchMethod == 'news') { window.location.href = "/?sid=53574&nid=208&cx=partner-pub-3771868546990559%3Ar955z1-wmf4&cof=FORID%3A9&ie=ISO-8859-1&sa=Search&searchtype=kslcom&q=" + searchKeyword + "&x=15&y=19"; return false; } else if (searchMethod == 'keyword') { //$('#search_form').attr('action', '/?sid=53574&nid=208&cx=partner-pub-3771868546990559%3Ar955z1-wmf4&cof=FORID%3A9&ie=ISO-8859-1&sa=Search&searchtype=keyword&q=' + searchKeyword + '&x=11&y=16'); window.location.href = "/?sid=53574&nid=208&cx=partner-pub-3771868546990559%3Ar955z1-wmf4&cof=FORID%3A9&ie=ISO-8859-1&sa=Search&searchtype=keyword&q=" + searchKeyword + "&x=11&y=16"; return false; } else if (searchMethod == 'classifieds') { window.location.href = "/index.php?nid=231&search=" + searchKeyword; return false; } else if (searchMethod == 'local') { window.location.href = "http://local.ksl.com/search/keyword/" + searchKeyword + "/location/Salt+Lake+City%2C+UT+84101"; return false; } else if (searchMethod == 'web') { window.location.href = "/?sid=53574&nid=208&cx=partner-pub-3771868546990559%3Afhkopy-oe3c&cof=FORID%3A9&ie=ISO-8859-1&sa=Search&searchtype=web&q=" + searchKeyword + "&x=0&y=0"; return false; } return false; } </script> <!-- END Temporary JS to get search working --> <form id="search_form" action="" method="get" onSubmit="return selectSearch();"> <div class="searchBox"> <input type="image" src="//static.ksl.com/header/header_graphics/search-magnify.png" class="button"/> <span class="dropdown"> <select id="search_select" class="dropdownMenu"> <option value="news">all of KSL</option> <option value="classifieds">Classifieds</option> <option value="local">Local</option> <option value="web">Web</option> <option value="keyword">Keyword</option> </select> </span> <input type="text" name="search" id="search_keyword" class="searchField" value="Enter Keyword" onclick="this.value = ''"/> </div> </form> <!-- End of Search box --> </div> <!-- middle --> <!-- Main Nav --> <div class="bottom"> <div id="headMenu" data-vr-zone="Head Menu"> <ul> <li class="off" nid="210"><a href="/index.php?nid=210" style=" padding: 0px 0px 10px 0px; background: none !important; height: auto; width: 100%;" data-vr-contentbox=""> <img src="//static.ksl.com/header/header_graphics/home-button.png" border=0> </a></li> <li class="navHover" nid="30"><a href="/index.php?nid=30" data-vr-contentbox=""> Utah </a></li> <li class="navHover" nid="998"><a href="/index.php?nid=998" data-vr-contentbox=""> Features </a></li> <li class="navHover" nid="31"><a href="/index.php?nid=31" data-vr-contentbox=""> U.S. </a></li> <li class="navHover" nid="32"><a href="/index.php?nid=32" data-vr-contentbox=""> World </a></li> <li class="navHover" nid="599"><a href="/index.php?nid=599" data-vr-contentbox=""> Politics </a></li> <li class="navHover" nid="115"><a href="/index.php?nid=769" data-vr-contentbox=""> Sports </a></li> <li class="navHover" nid="88"><a href="/?nid=88" data-vr-contentbox=""> Weather </a></li> <li class="navHover" nid="710"><a href="/index.php?nid=710" data-vr-contentbox=""> Traffic </a></li> <li class="navHover" nid="116"><a href="/index.php?nid=116" data-vr-contentbox=""> Biz </a></li> <li class="navHover" nid="11"><a href="/index.php?nid=11" data-vr-contentbox=""> Entertainment </a></li> <li class="navHover" nid="1168"><a href="/?nid=1287" data-vr-contentbox=""> Outdoors </a></li> <li class="navHover" nid="1267"><a href="/index.php?nid=1267" data-vr-contentbox=""> BrandView </a></li> </ul> </div> <div id="headclassifiedMenu" data-vr-zone="Marketplace Nav"> <ul> <li><a href="https://shops.ksl.com" data-vr-contentbox="" title="" style="position: relative;">Shops <div class="beta">Beta</div></a></li> <li><a href="/deals" data-vr-contentbox="" title="View today's discounts and deals">Deals</a></li> <li><a href="//local.ksl.com/" data-vr-contentbox="" title="Find Coupons & Discounts from Local Businesses">Local</a></li> <li ><a href="/jobs/" data-vr-contentbox="">Jobs</a></li> <li ><a href="/homes" data-vr-contentbox="">Homes</a></li> <li ><a href="/auto" data-vr-contentbox="">Cars</a></li> <li class="off"><a href="/index.php?nid=13" data-vr-contentbox="">Classifieds</a></li> </ul> </div> <!-- headclassifiedMenu --> </div> <!-- bottom --> </div> <!-- headBlock --> <!-- empty div for popOver --> <div id="popOverWindow"></div> <script> var SCROLL_OUT_DELAY = 500; var scrollTimer; var HOME_NID = '640' || 210; var PARENT_NID = '640' || 210; var activeNid = HOME_NID; var links = jQuery.parseJSON('[{"nid":"210","children":[]},{"nid":"30","children":[{"href":"\/index.php?nid=148","name":"Local Stories"},{"href":"\/index.php?nid=680","name":"Education"},{"href":"\/index.php?nid=308","name":"KSL Investigates"},{"href":"\/index.php?nid=1174","name":"Your Life - Your Health"},{"href":"\/index.php?nid=694","name":"Staying Safe"},{"href":"\/index.php?nid=1196","name":"More on the web"}]},{"nid":"998","children":[{"href":"\/index.php?nid=999","name":"Family"},{"href":"\/index.php?nid=1008","name":"HYST?"},{"href":"\/index.php?nid=1285","name":"Uplifting"},{"href":"\/index.php?nid=1000","name":"Lifestyle"},{"href":"\/index.php?nid=1287","name":"Outdoors &amp; Rec"},{"href":"\/index.php?nid=1007","name":"Religion"},{"href":"\/index.php?nid=1283","name":"LDS Life"},{"href":"\/index.php?nid=1002","name":"Science &amp; Tech"},{"href":"\/index.php?nid=333","name":"Odds &amp; Ends"},{"href":"\/index.php?nid=1072","name":"iWitness"},{"href":"\/index.php?nid=1358","name":"Initiatives"}]},{"nid":"31","children":[]},{"nid":"32","children":[]},{"nid":"599","children":[]},{"nid":"115","children":[{"href":"?nid=774","name":"BYU"},{"href":"?nid=827","name":"UofU"},{"href":"?nid=862","name":"Jazz"},{"href":"?nid=859","name":"USU"},{"href":"?nid=854","name":"RSL"},{"href":"?nid=853","name":"Prep"},{"href":"\/index.php?nid=1150","name":"SUU"},{"href":"\/index.php?nid=1151","name":"Weber"},{"href":"\/index.php?nid=1251","name":"UVU"},{"href":"\/index.php?nid=259","name":"Pickem"},{"href":"http:\/\/ksl.sportsdirectinc.com\/gamematchups.aspx","name":"Stats\/Scores"},{"href":"?nid=1356","name":"More"}]},{"nid":"88","children":[{"href":"http:\/\/www.ksl.com\/index.php?nid=1255","name":"Home"},{"href":"\/index.php?nid=525","name":"Current Conditions"},{"href":"\/index.php?nid=175","name":"VORTEX"},{"href":"\/index.php?nid=233","name":"MicroCast"},{"href":"?sid=35584527&nid=149","name":"Pollen Count"},{"href":"\/index.php?nid=340","name":"Junior Weather Specialists"},{"href":"?sid=128553&nid=522","name":"Ski Report"},{"href":"\/index.php?nid=524","name":"Weather Cams"},{"href":"?nid=580","name":"Water Watch"},{"href":"\/index.php?nid=978","name":"Snowpack"},{"href":"\/index.php?nid=1311","name":"myAir"},{"href":"\/index.php?nid=1314","name":"Air Quality"}]},{"nid":"710","children":[{"href":"?nid=710","name":"KSL Traffic Center"}]},{"nid":"116","children":[]},{"nid":"11","children":[{"href":"http:\/\/movies.ksl.com","name":"Movie Reviews &amp; Listings"},{"href":"\/index.php?nid=1204","name":"Entertainment News"}]},{"nid":"1168","children":[{"href":"http:\/\/outdoors.ksl.com\/","name":"Outdoors Activity Map"},{"href":"http:\/\/www.ksl.com\/index.php?nid=1113&sid=17217040&title=ksl-outdoors-with-adam-eakle","name":"KSL Outdoors with Adam Eakle"}]},{"nid":"1267","children":[{"href":"\/index.php?nid=1300","name":"Young Automotive Auto Review"},{"href":"\/index.php?nid=1306","name":"UofU Health Feed"},{"href":"\/index.php?nid=1332","name":"Green Tea HP"},{"href":"\/index.php?nid=1339","name":"Mountain America Money Matters"},{"href":"\/index.php?nid=1351","name":"MountainStar HealthShare"},{"href":"\/index.php?nid=1371","name":"UCAIR"},{"href":"\/index.php?nid=1375","name":"Zero Fatalities"},{"href":"\/index.php?nid=1379","name":"Salt Lake Regional Medical Center"},{"href":"\/index.php?nid=1381","name":"Broadway at the Eccles"}]},{"nid":"13","children":[{"href":"\/index.php?nid=47","name":"Browse Ads"},{"href":"\/index.php?nid=443","name":"Cars"},{"href":"?sid=5017903&nid=651","name":"Homes"},{"href":"\/jobs\/listings","name":"Jobs"},{"href":"\/index.php?sid=&nid=793","name":"Services"},{"href":"\/index.php?nid=640","name":"Place a FREE Ad"},{"href":"http:\/\/www.ksl.com\/index.php?nid=443&sid=733005&tab=post","name":"Place a FREE Car Ad"},{"href":"\/index.php?nid=280","name":"My Ads"},{"href":"\/index.php?nid=385","name":"Advanced Search"},{"href":"\/index.php?nid=207","name":"Help"}]}]'); var linksMap = jQuery.parseJSON('["210","30","998","31","32","599","115","88","710","116","11","1168","1267",640]'); if ($.inArray(parseInt(HOME_NID), linksMap) < 0) { HOME_NID = parseInt($("#headMenu li.on-sticky").attr("nid")) || 210; } for (var i = 0, len = linksMap.length; i < len; i++) { linksMap[i] = parseInt(linksMap[i]); } function subNavRow(links) { var panel = ''; if (!('children' in links)) { links.children = []; } for (var i = 0, len = links.children.length; i < len; i++) { panel += '<li><a href="' + links.children[i].href + '">' + links.children[i].name + '</a></li>'; } return panel; } function getSubNav(nid) { nid = parseInt(nid); activeNid = nid; var _links = void 0; var index = $.inArray(nid, linksMap); if (index >= 0) { _links = links[index]; } else { var _nid = $("#headMenu .on").attr("nid") || 0; _nid = parseInt(_nid); if (_nid <= 0) { _links = []; } else if ($.inArray(_nid, linksMap) >= 0) { _links = links[$.inArray(_nid, linksMap)]; } } var html = subNavRow(_links); $("#navBlock #navMenu ul").html(html); } function onMouseOver(event) { event.preventDefault(); clearTimeout(scrollTimer); var nid = $(this).parent().attr("nid"); getSubNav(nid); } function onMouseOverSub(event) { event.preventDefault(); clearTimeout(scrollTimer); $("#headMenu li[nid]").removeClass("on"); $("#headMenu li[nid='" + activeNid + "']").addClass("on"); } function onMouseOut(event) { event.preventDefault(); scrollTimer = setTimeout(function () { getSubNav(HOME_NID); activeNid = HOME_NID; $("#headMenu li[nid]").removeClass("on"); }, SCROLL_OUT_DELAY); } $("#headMenu").on("mouseover", "li[nid] a", onMouseOver); // These registrations *must* be rooted on body because that's [currently] the nearest ancestor // attached to the DOM by the time this code is executed. #headMenu and #navBlock don't get // attached until after this code executes. $("body").on("mouseover", "#headMenu li, #navBlock", onMouseOverSub); $("body").on("mouseout", "#headMenu li, #navBlock", onMouseOut); setTimeout(function () { getSubNav(HOME_NID); $("#navMenu a[href*='nid=640']").addClass("active"); }, 100); </script> <div id="mainoutsideBlock"> <div id="mainBlock"> <div id="navBlockorange"> <!-- .................... Block: subNavBar .................... --> <div id="navMenuorange"> <ul> <li><a href="/?nid=47">Classifieds</a></li> <li><a href="/auto">Cars</a></li> <li><a href="/homes">Homes</a></li> <li><a href="/jobs/">Jobs</a></li> </ul> <ul style="float: right; margin-top: 0px; margin-right: 5px;"> <li><a href="/?nid=385">Advanced Search</a></li> <li><a href="/?nid=207">Help</a></li> <li><a href="/myAds/listing-classified">My Ads</a></li> <li class="on"> <a class="placeAdHover" href="/?nid=1126" style="">Place an Ad <img style="margin-bottom: -3px;" height="8" width="8" src="/images/classifieds/placeAdArrow.jpg" border="0" /></a> </li> </ul> </div> <!-- navMenu --> <!-- Place an Ad popOver --> <div id="popOverWindow"></div> <!--[if IE]> <style type="text/css"> #placeAdDropdown { margin-right: -492px; } .placeAdHover { margin-top: -5px; } </style> <![endif]--> <script type="text/javascript" src="/javascript/placeAdPopOver.js?cachebust=2"></script> <!-- <div id="placeAdDropdown" style="position: absolute; right: 172px; top: 23px; display: none; width: 70px; height: 53px; /* left: 1043px;*/ background-color: #f7941d; z-index: 99;"> --> <div id="placeAdDropdown" > <!-- <a href="/?nid=1126" style="color: white; margin-bottom: 5px; margin-left: 5px; margin-top: 5px;">Classified</a><br /> --> <a href="/?nid=1126" style="color: white; margin: 5px;">Classified</a><br /> <a href="/auto/sell" style="color: white; margin: 5px;">Car</a><br /> <a href="http://local.ksl.com/merchant/list/look-up" style="color: white; margin: 5px;" >Business</a><br /> <a href="/jobs/edit" style="color: white; margin: 5px;" >Job</a><br /> <a href="/homes/sell/sell-choice" style="color: white; margin: 5px;">Home</a> </div> <!-- End Place Ad PopOver --> </div> <!-- navBlock --> <div id="bodyBlock"> <!-- .................... Block: column1 .................... --> <div id="bodyCol1"> <div style="width: 424px; float: left; margin: 0px 0px 10px 0px;"> <style type='text/css'> .announcement_box { float: left; clear:left; margin: 0px 0px 20px 0px; background: #eee; width: 615px; padding: 10px; font-size: 14px; font-weight: bold; } .announcement_box a { text-decoration:none; } </style> <div class="announcement_box"> <font color="#aa0000">UPDATE:</font> Services is now part of <a href="http://local.ksl.com/?s_cid=services">KSL Local</a> with more categories and added features.<br /> To take full advantage of KSL Local be sure to <a href="http://local.ksl.com/merchant/locations">add your business</a> today. Service ads posted outside of KSL Local will be deleted.<br /> </div> <div style='clear: both;'></div> </div> <div style="width: 424px; float: left; margin: 0px 0px 10px 0px;"> <!-- Hack --> <script type="text/javascript"> $(document).ready( function() { $('#3').attr('disabled', 'disabled'); $('#4').attr('disabled', 'disabled'); $('.element:eq(3)').append( ' <a href="index.php?nid=1126">Change »</a>' ); $('.element:eq(4)').append( ' <a href="index.php?nid=1126">Change »</a>' ); } ); </script> </div> <div id="bodyCol2"> <!-- ===================[ STORY PAGES ]================= --> <!-- ===================[ STORY MEDIA ]================= --> <!-- ===================[ STORY RELATED ]================= --> <!-- ===================[ STORY RELATED ]================= --> <!-- ===================[ STORY GALLERIES ]================= --> </div> <script language="JavaScript" type="text/javascript"> function addInputs() { var oNewNode = document.createElement("div"); oNewNode.setAttribute("style","padding-top: 5px;"); document.getElementById('attr_fields').appendChild(oNewNode); oNewNode.innerHTML="<input type=\"text\" name=\"text[]\" id=\"text[]\" size=\"25\" \/>"; // document.getElementById('attr_fields').innerHTML="<input type=\"text\" name=\"text[]\" id=\"text[]\" size=\"25\" \/>"; } var mediaCount = 0; // ================================================================ function addMedia(ctrlID,divID,inputName,limit) { var name = "media_"+mediaCount; var oNewNode = document.createElement("div"); oNewNode.setAttribute("style","padding-top: 3px;"); oNewNode.setAttribute("id",name); document.getElementById(divID).appendChild(oNewNode); oNewNode.innerHTML="<input name=\""+inputName+"[]\" type=\"file\" /> <a href=\"#\" onClick=\"delMedia('"+ctrlID+"','"+name+"')\">Remove</a>"; mediaCount++; if (document.getElementById(divID).childNodes.length >= limit) { document.getElementById(ctrlID).style.display = "none"; } // document.getElementById('attr_fields').innerHTML="<input type=\"text\" name=\"text[]\" id=\"text[]\" size=\"25\" \/>"; } // ================================================================ function delMedia(ctrlID,name) { var oNode = document.getElementById(name); oNode.parentNode.removeChild(oNode); mediaCount--; document.getElementById(ctrlID).style.display = "block"; } var subName; // ================================================================ function setCat(cName,sName,col,tId) { var sNode = document.getElementById(sName); var cIndex = document.getElementById(cName).selectedIndex; var cValue = document.getElementById(cName).options[cIndex].value; //alert(cValue); //sNode.style.background = "#ddd"; sNode.options[1] = new Option("[Loading Options]", "", false, false); sNode[1].selected = true; subName = sName; $('#throbber-'+subName).css('display','inline'); //document.getElementById("rmiCmd").src = "/scripts/cat_options.php?col="+col+"&tid="+tId+"&nid="+cValue; $.get('/scripts/cat_options2.php', { col: col, tid: tId, nid: cValue }, setSub2, 'json'); } // ================================================================ function setSub2(d) { var sub = $('#'+subName); $('#throbber-'+subName).css('display','none'); if(d.result == 'error') return; //sub.css('background-color','#ffffff'); sub.empty(); sub.append('<option value="">Select a Sub-Category</option>'); for(i in d.categories) { var v = d.categories[i].split('|'); sub.append('<option value='+v[0]+'>'+v[1]+'</option>'); } } // ================================================================ function setSub(doc) { var sNode = document.getElementById(subName); var rmiData = doc.getElementById('rmiData').innerHTML; var aItems = rmiData.split("|"); var aVals; sNode.style.background = "#fff"; //var tNode = document.getElementById("id_text"); //tNode.value = rmiData; for (var x = 0; x < (aItems.length -1); x ++) { aVals = aItems[x].split("="); sNode.options[x+1] = new Option(aVals[1],aVals[0],false,false); } sNode.length = x+1; sNode[0].selected = true; } // ================================================================ function start_upload(id) { $('#d-'+id).css('background-color', '#ccc'); $('.throbber').css('display', 'inline'); } // ================================================================ function stop_upload(id, src, desc, alt) { var html = ''; var idx = $('#u-'+id+' div.photo').length; if(src == false) { alert("Error: "+desc); } else { html = '<div class="photo"><div class="operations"><button class="photo-up" onclick="photo_up(this)">Move up</button> <button class="photo-down" onclick="photo_down(this)">Move down</button> <button class="photo-delete" onclick="photo_delete(this)">Delete</button></div><img class="thumbnail" src="'+src+'?filter=ksl/newhl"><div class="title"><span class="title-prefix">Photo:</span> '+alt+'</div><div><span class="title-prefix">Description:</span> <span class="description">'+desc+'</span></div><div><button class="photo-edit" onclick="photo_edit_description(this)">Edit description</button></div></div>'; $('#u-'+id).append(html); } // clear the form $('#d-'+id).css('background-color', 'white'); $('#f-'+id).get(0).reset(); $('.throbber').css('display', 'none'); } // ================================================================ function photo_up(e) { var src = $(e).parent().parent(); var dst = $(src.prev()); if(dst.length == 0) return; var srcidx = src.prevAll().length; var dstidx = srcidx-1; // perform API call $.post('/resources/form/airlock_api.php', { cmd: 'move_media', source: 'airlock', aid: '71632824', from: srcidx, to: dstidx }, function (d) { if(d.result != 'success') return; $(src).insertBefore(dst); }, 'json' ); } // ================================================================ function photo_down(e) { var src = $(e).parent().parent(); var dst = $(src.next()); if(dst.length == 0) return; var srcidx = src.prevAll().length; var dstidx = srcidx+1; // perform API call $.post('/resources/form/airlock_api.php', { cmd: 'move_media', source: 'airlock', aid: '71632824', from: srcidx, to: dstidx }, function (d) { if(d.result != 'success') return; $(src).insertAfter(dst); }, 'json' ); } // ================================================================ function photo_delete(e) { var src = $(e).parent().parent(); var index = src.prevAll().length; // perform API call $.post('/resources/form/airlock_api.php', { cmd: 'delete_media', source: 'airlock', aid: '71632824', index: index }, function (d) { if(d.result != 'success') return; src.remove(); }, 'json' ); } // ================================================================ function photo_edit_description(e) { var src = $(e).parent().parent(); var index = src.prevAll().length; var desc = src.find('.description'); var odesc = desc.text(); var ndesc = prompt('Please enter the description for the photo:', odesc); if(ndesc == null) return; // perform API call $.post('/resources/form/airlock_api.php', { cmd: 'edit_media', source: 'airlock', aid: '71632824', index: index, desc: ndesc }, function (d) { if(d.result != 'success') return; desc.text(ndesc); }, 'json' ); } // ================================================================ function supports_html5_storage() { try { return 'localStorage' in window && window['localStorage'] !== null; } catch (e) { return false; } } // ================================================================ function send_id() { //20110427 - BH //this causes double posting in the classifieds, as it resubmits anything in the airlock a second time. return; var id; if(!supports_html5_storage()) return; id = localStorage.getItem('ddmId'); if(id == null) { id = Math.round(Math.random()*10000000); localStorage.setItem('ddmId', id); } $.post('/resources/form/airlock_api.php', { cmd: 'set_id', source: 'airlock', aid: '71632824', id: id}, function(){}, 'json' ); } // ================================================================ $(document).ready(function(){ send_id(); }); </script> <style type="text/css"> .barBox { clear: left; margin-left: 0px; font-size: 14px; color: #fff; font-weight: normal; text-align: center; border-left: 1px solid #000; border-right: 1px solid #000; height: 21px; width: 620px; } .bar1 { float: left; background: url('/images/barBackRed.gif') no-repeat top right; height: 21px; } .bar2 { float: left; background: url('/images/barFrontRed.gif') no-repeat top right; height: 21px; } .bar3 { float: left; background: url('/images/barBackGrey.gif') no-repeat top right; height: 21px; } .bar4 { float: left; background: url('/images/barBackGrey.gif') no-repeat top left; height: 21px; } .bar5 { float: left; background: url('/images/barFrontRed.gif') no-repeat top left; height: 21px; } .barLabels { clear: left; margin-left: 10px; font-weight: bold; text-align: center; height: 21px; width: 332px; color: #666; padding-top: 5px; font-size: 12px; } .barBottom { float: left; height: 40px; text-align: left; } .barText { position: relative; top: 4px; left: -6px; } .formDivider { clear: left; width: 620px; border-top: 1px solid #ccc; background: #eeeeee; margin-top: 10px; margin-bottom: 15px; height: 20px; font-size: 14px; font-weight: bold; padding: 3px 0px 0px 7px; } .imageBox { float: left; margin-top: 5px; margin-bottom: 5px; margin-right: 10px; } .help { font-size: 10px; } .boxOk { margin-top: 4px; } .boxErr { margin-top: 4px; background: #fbb; border: 1px solid #900; padding: 2px; } .boxStatic { margin-top: 4px; font-weight: bold; font-size: 14px; } .optionBox { margin-top: 3px; margin-bottom: 8px; } .submitBox { clear: both; margin: 5px 0px 0px 2px; } .element { clear: left; width: 585px; margin-bottom: 3px; padding: 0px; } .elementFloat { float: left; margin-right: 10px; margin-bottom: 4px; } .iLabel { float: left; display: block; font-weight: normal; padding: 0px; margin: 4px 0px 0px 5px; text-align: left; font-size: 12px; width: 120px; } .gBox { width: 625px; margin: 0px 0px 15px 0px; padding: 0px; overflow: hidden; } .gTitle { font-size: 18px; font-weight: bold; padding: 5px 0px 5px 0px; width: 620px; border-top: 1px solid #ccc; margin: 0px 0px 12px 0px; } .gBody { padding: 0px 15px 5px 20px; width: 590px; } iframe.uploader { display: none; width: 0; height: 0; } /*iframe.uploader { display: block; width: 400px; height: 300px; }*/ .photos { margin-left: 5px; clear: both; } .operations { float: right; } .operations span { color: blue; } .photos div.photo { min-height: 77px; height: 77px; margin-bottom: 8px; padding-bottom: 9px; padding-top: 2px; border-bottom: dashed #ccc 1px; } .photos input { font-size: 10px; } .photos img { float: left; margin-right: 10px; } .photos .title-prefix { font-weight: bold; } .photos button { background-color: #e6e6e6; border: solid #aaa 1px; font-size: 80%; -moz-border-radius: 3px; -webkit-border-radius: 3px; } .photos button:hover { color: white; background-color: #0073ea; border: solid #0073ea 1px; } .photos button.photo-edit { margin-top: 3px; } .photos .thumbnail { width: 100px; height: 75px; } .throbber { display: none; } #HomeDetails { display: none; } </style> <div style='clear: both;'></div> <div class="gBox"> <div style="float:left; font-size: 14px; font-weight: bold; color: #777; margin: 0px 0px 2px 0px;">KSL Classifieds - Utah's Fastest Growing Classifieds Website</div> <div style="clear:left; font-size: 20px; font-weight: bold; margin: 0px 0px 10px 0px;">Place a FREE Classified Ad</div> <div style=" margin: 0px 0px 10px 0px; "> <div class="barBox"> <div class="bar1" style="width: 137px;"><span class="barText"><span style="font-size: 11px;">Create the Ad</span></span></div> <div class="bar1" style="width: 124px;"><span class="barText"><span style="font-size: 11px;">Contact Info</span></span></div> <div class="bar2" style="width: 124px;"><span class="barText"><span style="font-size: 11px;">Add Photos</span></span></div> <div class="bar3" style="width: 124px;"><span class="barText"><span style="font-size: 11px;">Terms of Use</span></span></div> <div class="bar4" style="width: 111px;"><span class="barText"><span style="font-size: 11px;">Thank You</span></span></div> </div> </div> <div id=""> <div id="" class="gBody"> </div> </div> <div id="PhotoUpload"> <div class="gTitle">Photo Upload</div> <div id="PhotoUpload" class="gBody"> <div class="element"> <p> <b>Note:</b> The first photo will be used as the primary photo and will represent your ad in the listings, so make sure it's the best photo you have. Use the buttons to the right of each image to change the ordering. </p> <br> </div> <div class="element"> <div id="u-142" class="photos"> </div> <form id="f-142" method="post" enctype="multipart/form-data" action="/resources/form/upload.php" onsubmit="start_upload(142)"> <input type="hidden" name="nid" value="640" /> <input type="hidden" name="sid" value="4516794" /> <input type="hidden" name="fid" value="191336" /> <input type="hidden" name="source" value="airlock" /> <input type="hidden" name="aid" value="71632824" /> <label for="142" class="iLabel">File:</label> <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> <input id="142" name="142" type="file" class="boxOk" /><br/> </div> <div class="element"> <label for="d-142" class="iLabel">Description:</label> <textarea name="d-142" class="boxOk" id="d-142" wrap="soft" style="width: 400px; height: 50px;"></textarea> </div> <div class="element"> <label for="s-142" class="iLabel"></label> <input id="s-142" name="s-142" type="submit" value="Upload file" /> <img class="throbber" src="/graphics/throbber.gif" height="16" width="16"> <br/> <iframe id="i-142" name="i-142" class="uploader" src=""> </iframe> </form> <script type="text/javascript"> //$(document).ready(function () { $('#f-142').submit(function () { $('#f-142').attr('target','i-142'); }); //}); </script> </div> </div> </div> <div id="PhotoTips"> <div class="gTitle">Photo Tips</div> <div id="PhotoTips" class="gBody"> <div class="element"> <div style="padding-bottom: 7px; padding-left: 15px;"> <li>Submitted images must be in JPG or GIF format.</li> <li>Although all submitted images will automatically be resized to <span style="font-weight: bold;">640x480</span> pixels, we recommend resizing your images to these dimensions before you upload them to avoid any potential problems. Click <a href=http://www.ksl.com/?nid=391&sid=651805 target="_new">HERE</a> for instructions on how to do this.</li> <li>If resizing your images, as recommended above, does not help, then try submitting the ad with no images and then add the rest later using the edit function in "My Ads".</li> </div> </div> </div> </div> </div> <form method="post" action="/index.php?nid=640&form_3=16&form_4=467" enctype="multipart/form-data" /> <input type="hidden" name="nid" value="640" /> <input type="hidden" name="sid" value="4516794" /> <input type="hidden" name="fid" value="191336" /> <div class="submitBox"> <input type="submit" value="&lt;&lt; Back Page" name="back" class="submitBox" /> <input type="submit" value="Next Page &gt;&gt;" name="next" class="submitBox" /> </div> </form> <style type="text/css"> .mediaright { float: right; margin-left: 15px; margin-bottom: 3px; width: 202px; } .medialeft { float: left; margin-right: 30px; margin-bottom: 3px; width: 202px; } .sidebarright { float: right; width: 180px; border-bottom: 1px #ccc solid; color: #000; font-size: 12px; margin: 0px 0px 10px 10px; padding: 0px 0px 7px 0px; } .sidebarleft { float: left; width: 180px; border-bottom: 1px #ccc solid; color: #000; font-size: 12px; margin: 0px 10px 10px 0px; padding: 0px 0px 7px 0px; } .sidebarleft ul { margin: 0px 0px 0px 0px; padding: 0px 0px 0px 30px; } .sidebarright ul { margin: 0px 0px 0px 0px; padding: 0px 0px 0px 30px; } .divboxleft { float: left; margin-right: 15px; margin-bottom: 3px; width: 202px; font-size: 12px; padding: 6px; border: solid 1px black; } .divboxright { float: right; margin-left: 15px; margin-bottom: 3px; width: 202px; font-size: 12px; padding: 6px; border: solid 1px black; } .divboxleft ul { margin: 0px 0px 0px 10px; padding: 5px 0px 5px 15px;overflow: auto; } .divboxright ul { margin: 0px 0px 0px 10px; padding: 5px 0px 5px 15px;overflow: auto; } .divboxleft font { font-size: 11px; } .divboxright font { font-size: 11px; } .ksltableleft { float: left; margin-right: 15px; margin-bottom: 10px;margin-top: 5px;font-size: 11px; } .ksltableright { float: right; margin-left: 15px; margin-bottom: 10px;margin-top: 5px;font-size: 11px; } .ksltable { border-collapse:collapse; } .ksltable td, .ksltable th { font-size:11px; border:1px solid black; padding:3px 7px 2px 7px; text-align: center; } .ksltable th { font-size:12px; text-align:center; font-weight: bold;padding-top:5px; padding-bottom:4px; background-color:#0b162f; color:#fff; } span#widgetclose:hover { cursor: pointer; } </style> <!-- ===================[ STORY HEAD : INTRO ]================= --> <div id="storyIntro" > </div> <!-- HERE HERE --> <!-- Google Analytics --> <script> (function(i,s,o,g,r,a,m){ i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-70949446-4', 'auto'); ga('send', 'pageview'); </script> </div> <!-- sid 17555887 = rentler place an ad page --> <div id="bodyCol3"> <div id="video-companion-2"></div> <div class="ad_block"> <div data-cb-ad-id="Default 0"> <div id='div-gpt-ad-1458596221-0' style="padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; z-index:-1;"></div> </div> <div style="padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; text-align: right; z-index:-1;"> <div style="font-size: 9px; "> <link rel="stylesheet" href="/packages/jquery-ui/v1.10.2/jquery-ui-1.10.2.custom.min.css" type="text/css" media="screen" title="no title" charset="utf-8"/> <script type="text/javascript" src="//static.ksl.com/packages/jquery-ui/v1.10.2/jquery-ui-1.10.3.custom.min.js"></script> <script type="text/javascript" src="//static.ksl.com/javascript/report_ad_gpt.js"></script> <a href="http://ads.ksl.com/" style="color: #8f94a0; float: left;">Advertise with us</a> <a href="#" onClick="aboutpop(this)" style="color: #8f94a0; float: right;">Report this ad</a> </div> </div> </div> <div style="clear:both; margin: 0px 0px 15px 0px;"></div> <div class="ad_block"> <div data-cb-ad-id="Default 1"> <div id='div-gpt-ad-1458596221-1' style="padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; z-index:-1;"></div> </div> <div style="padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; text-align: right; z-index:-1;"> <div style="font-size: 9px; "> <link rel="stylesheet" href="/packages/jquery-ui/v1.10.2/jquery-ui-1.10.2.custom.min.css" type="text/css" media="screen" title="no title" charset="utf-8"/> <a href="http://ads.ksl.com/" style="color: #8f94a0; float: left;">Advertise with us</a> <a href="#" onClick="aboutpop(this)" style="color: #8f94a0; float: right;">Report this ad</a> </div> </div> </div> <div style="clear:both; margin: 0px 0px 15px 0px;"></div> <div class="ad_block"> <div data-cb-ad-id="Default 2"> <div id='div-gpt-ad-1458596221-2' style="padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; z-index:-1;"></div> </div> <div style="padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; text-align: right; z-index:-1;"> <div style="font-size: 9px; "> <link rel="stylesheet" href="/packages/jquery-ui/v1.10.2/jquery-ui-1.10.2.custom.min.css" type="text/css" media="screen" title="no title" charset="utf-8"/> <a href="http://ads.ksl.com/" style="color: #8f94a0; float: left;">Advertise with us</a> <a href="#" onClick="aboutpop(this)" style="color: #8f94a0; float: right;">Report this ad</a> </div> </div> </div> <div style="clear:both; margin: 0px 0px 15px 0px;"></div> </div> <div class="headlineQueueHeadcol1wide" style="width: 984px;"> Site Index </div> <div class="nocontent"> <table width="984" border="0" class="siteIndex nocontent"> <tr valign="top"> <td width="164"><h2><a href="/index.php?nid=10">News</a></h2> <ul><li> <a href="/index.php?nid=30">Utah</a> <ul><li><a href="/index.php?nid=30">News</a> <li> <a href="/index.php?nid=680"> Education</a> <li> <a href="/index.php?nid=308">KSL Investigates</a> <li> <a href="/index.php?nid=1174">Your Life Your Health</a> <li> <a href="/index.php?nid=694">Staying Safe</a> <li> <a href="/index.php?nid=1196">More on the web</a></ul> </ul> <ul><li> <a href="/index.php?nid=30">Page Two</a> <ul><li><a href="/index.php?nid=999">Family</a> <li> <a href="/index.php?nid=1285">Uplifting</a> <li> <a href="/index.php?nid=1000">Lifestyle</a> <li> <a href="/index.php?nid=1287">Outdoors & Recreation</a> <li> <a href="/index.php?nid=1007">Religion</a> <li> <a href="/index.php?nid=1283">LDS Life</a> <li> <a href="/index.php?nid=599">Politics</a> <li> <a href="/index.php?nid=1002">Science & Tech</a> <li> <a href="/index.php?nid=333"> Odds &amp; Ends</a> <li> <a href="/index.php?nid=1281">Gephardt Gets It!</a> <li> <a href="/index.php?nid=1072">iWitness</a> </ul> </ul> <li> <a href="/index.php?nid=31"> National</a> <li> <a href="/index.php?nid=32"> World</a> <li> <a href="/index.php?nid=116"> Biz/Finance</a> <li> <a href="/index.php?nid=1198">Consumer</a> </uL></td> <td width="164"><h2><a href="/index.php?nid=88">Weather</a></h2> <ul><li> <a href="/index.php?nid=88">Forecasts</a> <li> <a href="/index.php?sid=2289447&nid=525"> Current Conditions</a> <li> <a href="/index.php?nid=175"> VORTEX</a> <li> <a href="/index.php?nid=233"> Microcast</a> <li> <a href="/index.php?sid=&nid=580"> Water Watch</a> <ul><li> <a href="/index.php?nid=149&sid=134181">Snowpack totals</a> <li> <a href="/index.php?nid=581&sid=2658650">Ramp reports</a> <li> <a href="/index.php?nid=149&sid=3321269">Lawn Watering guide</a> <li> <a href="/index.php?nid=149&sid=215478">Flood/Water Flow</a></ul> <li> <a href="/index.php?sid=901157&nid=461"> Photo Galleries</a> <li> <a href="/index.php?sid=106058&nid=149"> Weather Planner</a> <li> <a href="/index.php?nid=340&sid=148077"> Weather Lab</a> <li> <a href="/index.php?nid=366&sid=174427"> Ask the Meteorologist</a> <li> <a href="/index.php?sid=128553&nid=522"> Ski Report</a> <li> <a href="/index.php?nid=656"> Weather on 5.3</a> </ul> <p> <h2><a href="/index.php?nid=710">Traffic</a></h2> <ul><li> <a href="/index.php?nid=710">Traffic Cams</a> </ul> <p> <h2><a href="/index.php?nid=710">Special Features</a></h2> <ul><li> <a href="/index.php?nid=295"> General Conference</a> </ul> </td> <td width="164"> <h2><a href="/index.php?nid=115">Sports</a></h2> <ul> <li> <a href="/index.php?nid=271"> BYU</a> <ul> <li> <a href="/index.php?nid=841&sid=13378103">Coach's Show</a> <li> <a href="/index.php?nid=497">Cougar Tracks</a> <li> <a href="/index.php?nid=868">My Cougar Stories</a> <li> </ul> <li> <a href="/index.php?nid=634">U of U</a> <ul> <li> <a href="/index.php?nid=839">Crimson Corner</a> </ul> <li> <a href="/index.php?nid=859">USU</a> <ul> <li> </ul> <li> <a href="/index.php?nid=637">Jazz/NBA</a> <ul><li> <a href="/index.php?sid=1591910&nid=497">Schedule</a> / <a href="/index.php?sid=1591910&nid=497">Stats</a> / <a href="/index.php?sid=1591910&nid=497">Standings</a> <li> <a href="/index.php?sid=1591910&nid=497">Blog</a> </ul> <li> <a href="/index.php?nid=854">RSL</a> <ul><li> <a href="/index.php?sid=1591910&nid=497">Schedule</a> / <a href="/index.php?sid=1591910&nid=497">Stats</a> / <a href="/index.php?sid=1591910&nid=497">Standings</a> <li> <a href="/index.php?sid=1591910&nid=497">Blog</a> </ul> <li> <a href="/index.php?nid=431">Prep</a> <ul><li> <a href="/index.php?sid=1591910&nid=497">Schedule / Scoreboard</a> / <a href="/index.php?sid=1591910&nid=497">Standings</a> <li> <a href="/index.php?sid=1591910&nid=497">KSL Coaches Poll</a> </ul> <li> <a href="/index.php?nid=140"> NFL</a> <li> <a href="/index.php?nid=377">Golf Utah</a> <li> <a href="/index.php?nid=937">Stats/Scores</a> <li> <a href="http://bleacherreport.com/salt-lake-city-sports">Bleacher Reports</a> </ul> <p> <h2><a href="http://movies.ksl.com"> Movies</a></h2> <ul><li> <a href="http://movies.ksl.com">Movie/Theater Listings</a></uL> </td> <td width="164"> <h2><a href="/index.php?nid=1114">Shows</a></h2> <ul> <li> <a href="http://studio5.ksl.com">Studio 5</a> <li> <a href="/index.php?nid=1113&sid=17217040&title=ksl-outdoors-with-adam-eakle">KSL Outdoors w/ Adam Eakle</a> <li> <a href="http://www.ksl.com/?sid=&nid=315&title=ksl-5-news-today">KSL 5 News Today</a> <li> <a href="/index.php?sid=23994024&nid=1193&title=the-browser-50---weekdays-at-1230-on-ksl-5">The Browser 5.0</a> <li> <a href="/index.php?nid=178">Utah's Morning News</a> <li> <a href="/index.php?nid=399">Doug Wright Show</a> <li> <a href="/index.php?nid=894">The Browser</a> <li> <a href="/index.php?nid=180">Utah's Afternoon News</a> <li> <a href="http://nightside.ksl.com/">Nightside Project</a> <li> <a href="/index.php?nid=399">KSL Movie Show</a> <li> <a href="/index.php?nid=186">KSL Outdoors</a> <li> <a href="/index.php?nid=183">KSL Greenhouse Show</a> <li> <a href="/index.php?nid=305">Matt Townsend Show</a> <li> <a href="/index.php?nid=185">KSL Travel Show</a></ul> <p> <h2><a href="/index.php?nid=13">Classifieds</a></h2> <ul><li> <a href="/index.php?nid=13">General</a> <li> <a href="/homes">Homes</a> <li> <a href="/auto">Cars</a> <li> <a href="http://www.ksl.com/jobs">Utah Jobs</a> <li> <a href="http://www.ksl.com/deals">Deals</a> <li> <a href="http://local.ksl.com/">Local</a> <li> <a href="/index.php?nid=207">Help</a></ul> <p> </td> <td width="164" > <h2><a href="/index.php?nid=15">TV</a></h2> <ul><li> <a href="/index.php?nid=38"> Bios</a> <li> <a href="/index.php?nid=42">Schedule</a> <li> <a href="/index.php?nid=239"> Contests</a> <li> <a href="/index.php?nid=1196"> More on the Web</a> <li> <a href="http://studio5.ksl.com/"> Studio 5</a></ul> <p> <h2><a href="/index.php?nid=16">Radio</a></h2> <ul><li> <a href="/index.php?nid=16"> Listen LIVE</a> <li> <a href="/index.php?nid=209"> Podcasts</a> <li> <a href="/index.php?sid=122030&nid=312"> Lineup</a> <li> <a href="/index.php?nid=317"> Bios</a> <li> <a href="/index.php?nid=311"> Shows</a> <li> <a href="/index.php?nid=318">Features</a> <ul><li> <a href="/index.php?sid=2359958&nid=189">Speaking on Biz</a> <li> <a href="/index.php?nid=191">Teacher Feature</a> <li> <a href="/index.php?sid=29384064&nid=303">Money Matters</a> <li> <a href="/index.php?sid=30155869&nid=256">Utah Gives Back</a></ul> <li> <a href="/index.php?nid=253">Contests</a> <li> <a href="/index.php?nid=318">Events</a></ul> </td> <td width="164" style="background: #eee; padding: 2px 0px 0px 4px;"> <h2><a href="http://ads.ksl.com/">Advertise with KSL</a></h2> <p> <h2>Other Resources</h2> <ul><li> <a href="/index.php?nid=205">Contact Us</a> / <a href="/index.php?nid=277">Phone Numbers</a> <li> <a href="http://ksl.applicantpro.com" target="_blank">Careers with KSL</a> <li> <a href="http://deseretdigital.applicantpro.com">Careers with DDM</a> <li> <a href="/index.php?nid=278">Web Resources</a> <li> <a href="/index.php?sid=5562812&nid=322">Charity Account Form</a> </ul> <p> <h2>Mobile</h2> <ul><li> <a href="http://m.ksl.com">ksl.com mobile</a> <li> <a href="/index.php?sid=17920249&nid=250">KSL mobile apps</a> <li> <a href="http://www.ksl.com/?sid=14578360&nid=971">text alerts</a> </ul> <p> <h2>Legal</h2> <ul><li> <a href="/index.php?sid=95313&nid=250">Terms of Use</a> <li> <a href="/index.php?nid=250&sid=95314">Privacy Statement</a> <li> <a href="/index.php?nid=250&sid=95315">DMCA Notice</a> <li> <a href="http://www.ksl.com/eeo/EEO_Public_File.pdf">EEO Public File Report</a> <li> <a href="https://stations.fcc.gov/station-profile/ksl-tv">FCC Public File</a> <li> <a href="/index.php?sid=10021371&nid=250">Closed Captioning Assistance</a></ul> <p> <h2>Sister Sites</h2> <ul> <li> <a href="http://fm100.com/">FM100</a> / <a href="http://www.1035thearrow.com/">Arrow 103.5</a> <li><a href="http://www.deseretnews.com/home">Deseret News</a> <li><a href="http://www.utah.com">Utah.com</a> <li><a href="http://deseretbook.com/">Deseret Book</a> </ul> <p> </td> </tr> </table> </div> <div style="clear: left; padding: 10px 0px 0px 0px;"></div> </div> <!-- ============== BOTTOM BANNER =============== --> <div id="bannerad" > </div> <!-- ============== BOTTOM NAV============ --> <div style="padding: 4px 0px 10px 0px; font-size: 9px; text-align: center;"> <div style="margin-left: 7px; margin-right: 7px; text-align: center; padding: 2px; margin-bottom: 3px;"> KSL's Children's Television Programming Reports, as well as its FCC public inspection file, are available for viewing during regular office hours at the KSL Broadcast House or <a href="https://stations.fcc.gov/station-profile/ksl-tv">online</a>. <br> The station representative who can assist a person with disabilities with issues related to the content of the public files is Mike Dowdle, available during regular office hours at <a href="mailto:closed_captioning@ksl.com">closed_captioning@ksl.com</a> and (801) 575-5555. </div> <div style="padding: 10px 0px 10px 0px;"> &copy; 2016 ksl.com | KSL Broadcasting Salt Lake City UT | Site hosted &amp; managed by Deseret Digital Media - a Deseret Media Company&nbsp;&nbsp;v13</div> <div style="padding: 0px 0px 0px 0px;"><img name="footer" src="/graphics/ksl11/footer.png" width="537" height="38" border="0" id="footer" usemap="#m_footer" alt="" /><map name="m_footer" id="m_footer"> <area shape="rect" coords="327,0,485,34" href="http://deseretmediacompanies.com/" target="_blank" alt="" /> <area shape="rect" coords="230,4,316,38" href="http://deseretdigital.com/" target="_blank" alt="" /> <area shape="rect" coords="146,5,219,38" href="http://www.ksl.com/index.php?nid=16" alt="" /> <area shape="rect" coords="62,5,133,38" href="http://www.ksl.com/index.php?nid=15" alt="" /> </map> </div> <div style="clear: both; margin: 0px; padding: 0px; height: 5px;"></div> </div> </div> <!-- Crazy Egg Start --> <script type="text/javascript"> setTimeout(function() { var a=document.createElement("script"); var b=document.getElementsByTagName("script")[0]; a.src=document.location.protocol+"//script.crazyegg.com/pages/scripts/0021/2728.js?"+Math.floor(new Date().getTime()/3600000); a.async=true;a.type="text/javascript";b.parentNode.insertBefore(a,b) }, 1); </script> <!-- Crazy Egg End --> <script type="text/javascript" src="https://scdn.cxense.com/cx.js"></script> <script type="text/javascript"> (function() { var src = '//www.googletagservices.com/tag/js/gpt.js'; document.write('<scr' + 'ipt src="' + src + '" ></scr' + 'ipt>'); })(); (function() { var src = '//ksl-d3.openxenterprise.com/w/1.0/jstag?nc=6686-KSL_Classified'; document.write('<scr' + 'ipt src="' + src + '" ></scr' + 'ipt>'); })(); </script> <script type='text/javascript' > googletag.cmd.push(function() { googletag.defineSlot('/6686/ddm.ksl/Classifieds//PlaceaFREEAd', [[300, 250], [300, 600]], 'div-gpt-ad-1458596221-0').addService(googletag.pubads()).setTargeting('pos', 'right').setTargeting('tile', '1'); googletag.defineSlot('/6686/ddm.ksl/Classifieds//PlaceaFREEAd', [[300, 250], [300, 600]], 'div-gpt-ad-1458596221-1').addService(googletag.pubads()).setTargeting('pos', 'right2').setTargeting('tile', '2'); googletag.defineSlot('/6686/ddm.ksl/Classifieds//PlaceaFREEAd', [[300, 250], [300, 600]], 'div-gpt-ad-1458596221-2').addService(googletag.pubads()).setTargeting('pos', 'right3').setTargeting('tile', '3'); googletag.pubads().setTargeting('v','classifieds'); googletag.pubads().setTargeting('cpostcat','16'); googletag.pubads().setTargeting('cpostsub','467'); googletag.pubads().setTargeting('cc','placeafreead'); googletag.pubads().setTargeting('article-id','4516794'); googletag.pubads().setTargeting('gclcat','16'); googletag.pubads().setTargeting('gclsubcat','467'); googletag.pubads().setTargeting('CxSegments', cX.getUserSegmentIds({persistedQueryId:'50a2829a9f34688dedf9ec64d1241d426da983d2'})); //googletag.pubads().enableSingleRequest(); googletag.pubads().collapseEmptyDivs(); googletag.enableServices(); if (Math.random() >= 0.95) { googletag.pubads().addEventListener('slotRenderEnded', function(event){ $.post('/api/adunit.php', { u: event.slot.getAdUnitPath(), s: event.size[0]+'x'+event.size[1], l: event.lineItemId, e: event.isEmpty }); //console.log('rendered slot:'+event.slot.getAdUnitPath()+' sizes:'+event.size[0]+'x'+event.size[1]+' line item:'+event.lineItemId); }); } setTimeout(function(){ renderAds(); }, 250); }); </script> <script type='text/javascript'> function renderAds() { //alert('rendering'); googletag.cmd.push(function() { googletag.display('div-gpt-ad-1458596221-0'); }); googletag.cmd.push(function() { googletag.display('div-gpt-ad-1458596221-1'); }); googletag.cmd.push(function() { googletag.display('div-gpt-ad-1458596221-2'); }); } </script> <script language="javascript"> //document.getElementById("bodyCol3").innerHTML = ""; </script> <!-- ============== BOTTOM BANNER =============== --> <iframe name="rmiCmd" id="rmiCmd" src="/images/dot1.gif" height="1" width="1" style="visibility:hidden;"></iframe> <iframe name="onDemandback" id="onDemandback" src="" style="visibility:hidden; height: 0px;"></iframe> <!-- old omniture location --> </div> <div id="sitepopup" style="display: none;"></div> <div id="sitewindow" rel="lightbox" style="display: none;"></div> <script type="text/javascript"> var xdbt_end = (new Date()).getTime(); var xdbt_time = (xdbt_end-xdbt_start)/1000; $('#xdbt-time').text(xdbt_time); $('#xdbt-memory').text("3167 KB"); //if(Math.random()*100 < 5) // $.post('/logic/stats/latency.php', { latency: xdbt_time, server: '' }, function(){}, 'json'); </script> <!--PubMatic Universal Pixel tag (Javascript) http://www.ksl.com--> <script type='text/javascript'> var pubId=27332; var pixId=39; </script> <script src='http://ads.pubmatic.com/AdServer/js/universalpixel.js' type='text/javascript'> </script> <!-- Quantcast Tag --> <script type="text/javascript"> var _qevents = _qevents || []; (function() { var elem = document.createElement("script"); elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js"; elem.async = true; elem.type = "text/javascript"; var scpt = document.getElementsByTagName("script")[0]; scpt.parentNode.insertBefore(elem, scpt); })(); _qevents.push({ qacct:"p-KUMT4fYgcdEeg", labels:"ddmnetwork.marketplace.ksl.classifieds" }); </script> <noscript> <div style="display:none;"> <img src="//pixel.quantserve.com/pixel/p-KUMT4fYgcdEeg.gif?labels=ddmnetwork.marketplace.ksl.classifieds" border="0" height="1" width="1" alt="Quantcast"/> </div> </noscript> <!-- End Quantcast tag --> <!-- cXense script begin --> <div id="cX-root" style="display:none"></div> <script type="text/javascript"> var cX = cX || {}; cX.callQueue = cX.callQueue || []; cX.callQueue.push(['setAccountId', '9222289450909507122']); cX.callQueue.push(['setSiteId', '9222289450909507123']); cX.callQueue.push(['sendPageViewEvent']); </script> <script type="text/javascript"> (function() { try { var scriptEl = document.createElement('script'); scriptEl.type = 'text/javascript'; scriptEl.async = 'async'; scriptEl.src = ('https:' == document.location.protocol) ? 'https://scdn.cxense.com/cx.js' : 'http://cdn.cxense.com/cx.js'; var targetEl = document.getElementsByTagName('script')[0]; targetEl.parentNode.insertBefore(scriptEl, targetEl); } catch (e) {};} ()); </script> <!-- cXense script end --> <!-- Begin comScore Tag --> <script> var _comscore = _comscore || []; _comscore.push({ c1: "2", c2: "16033947" }); (function() { var s = document.createElement("script"), el = document.getElementsByTagName("script")[0]; s.async = true; s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js"; el.parentNode.insertBefore(s, el); })(); </script> <noscript> <img src="http://b.scorecardresearch.com/p?c1=2&c2=16033947&cv=2.0&cj=1" /> </noscript> <!-- End comScore Tag --> </body> </html>  
    • Wingens
      Test Upload speed
      By Wingens
      Hi,
      is there anyone who can help me figure something out.
      I am creating a tool that checks the systemspecs and write this down in a text file.
      I got everything down, specs, internet download test, ISP information. Only thing that i am not getting done is the upload test.
       
      Hope you guys can help me.
      check-forum.au3
      NetInfo.au3
      SMTPAUTH.au3
      NavInfo.au3
      date.cmd
    • 31290
      Download a variable link
      By 31290
      Hi everyone, 
      Following this page:
      http://downloads.dell.com/published/pages/latitude-e5450-laptop.html
      I have to download the BIOS for the E5440 model. As I don't know in which order Dell will place the description and the link to download the file (also because the 5440 can be put in first) I'd like to make  the following piece of code to search only first the link that deals with the E5440:
      (The only thing I'm sure is that the string E5440 will be either in the first or the second position and I need to download the corresponding link)
      Local $sRead = InetRead('http://downloads.dell.com/published/pages/latitude-e5450-laptop.html', 1) ConsoleWrite(BinaryToString($sRead) & @CRLF) Local $aData = _StringBetween(BinaryToString($sRead), 'Type: BIOS', 'Category:') TrayTip("", "Downloading latest BIOS Version, please wait...", 10, 3) Local $aLinks = _StringBetween($aData[0], '<A HREF="/', '"><IMG') For $i = 0 To UBound($aLinks) - 1 $aLinks[$i] = 'http://downloads.dell.com/' & $aLinks[$i] Next Local $hDownload = InetGet($aLinks[0], @DesktopDir & "\BIOSE5450.exe", $INET_FORCERELOAD, $INET_DOWNLOADBACKGROUND) Do Sleep(250) Until InetGetInfo($hDownload, $INET_DOWNLOADCOMPLETE) Local $iBytesSize = InetGetInfo($hDownload, $INET_DOWNLOADREAD) Local $iFileSize = Round(FileGetSize(@DesktopDir & "\BIOSE5450.exe") / 1048576) InetClose($hDownload) MsgBox(0, "", "The latest E5450 BIOS (" & $iFileSize & " MB) have been downloaded")
      I was thinking of an string search in the array but all my attempts failed for now.
      Can someone could give me a hand over here.
       
    • 31290
      Download file with name changing
      By 31290
      Hi Guys, 
      Hope you're doing fine today.
      Well, I'm trying to achieve something I want to integrate to a tool I already created.
      At work, we deploy computers massively and we use the tool to perform automatic operations. Then, we have to update the BIOS to the latest version. To avoid a heavy tool, I'd like to automatically download the latest BIOS on the Dell Website but the thing is that the name of the fail change when a new version is published. Of course, I cannot know what version will be deployed by Dell but I have this when connecting to the website:

      Thus, I don't know if the FOLDERXXXXX of the download URL will change if a new version ins deployed. 

      Here's one of the pages of a model we also use: http://www.dell.com/support/home/us/en/19/product-support/product/latitude-e5450-laptop/drivers/advanced
      Well, i'm kind of stuck here and maybe someone could point something out
      Thanks in advance