MySQL UDF cURL Code
A user defined function for cURL use in MySQL
Status: Beta
Brought to you by:
pebbleroller
File | Date | Author | Commit |
---|---|---|---|
Makefile | 2014-06-27 | pebbleroller | [r1] initial public offering |
README | 2015-10-22 | pebbleroller | [r5] introducing curl_buffered() plus a bug fix |
install.sh | 2015-06-19 | pebbleroller | [r3] Correcting archival artifacts |
lib_mysqludf_curl.c | 2015-10-22 | pebbleroller | [r5] introducing curl_buffered() plus a bug fix |
lib_mysqludf_curl.sql | 2015-10-22 | pebbleroller | [r5] introducing curl_buffered() plus a bug fix |
--- lib_mysqludf_curl --- As complete an interface to cURL as makes sense in a MySQL UDF USAGE: SET filename = curl([newline delimited string of options]); RETURNS a temporary filename containing the result (readable by LOAD_FILE) SET result = curl_buffered([newline delimited string of options]); RETURNS the result of the cURL transaction (This function uses open_memstream, which I understand to be available only on GNU systems. Compiling on other systems will result in a function that only ever returns an error.) SET encoded = url_encode([unescaped string]); RETURNS an appropriately url encoded string for use in query strings and application/x-www-form-urlencoded POSTS EXAMPLES: SET filename = curl('CURLOPT_URL http://google.com\nCURLOPT_FOLLOWLOCATION 1'); SET result = curl_buffered(CONCAT('CURLOPT_URL http://mysite.com?myfield=', url_encode(user_input),'&opt=1\n', 'CURLOPT_FOLLOWLOCATION 1')); SET filename = curl(CONCAT('CURLOPT_URL http://google.com\n', 'CURLOPT_FOLLOWLOCATION 1\n', 'CURLOPT_PREQUOTE uptime > /dev/null; touch /dev/null\n', 'CURLOPT_HTTPAUTH CURLAUTH_DIGEST | CURLAUTH_NTLM_WB')); The only CURLOPT options that are not available for use with the UDF are callback and shared memory options. (Also, your installed version of curl may have more or less options - less will cause compiler complaints) Any curl options that take constants, like CURLAUTH_DIGEST, CURLUSESSL_TRY, etc. should be supplied with the exact constant name (all caps and underscores) Any curl options that require an 'slist' for setopt, like CURLOPT_QUOTE, CUROPT_RESOLVE, CURLOPT_MAIL_RCPT, etc. should be supplied a semicolon delimited list Any curl options that take a bitmask should be ORed using curl's defined constants as above. For File uploads (FTP, SMTP, etc) use 'CURLOPT_READDATA /path/to/file\n' --- INSTALLATION NOTES --- Near the top of the source file (lib_mysqludf_curl.c), there is a #define for TEMP_DIR that can be modified (and must be for use on Windows). Because the UDF uses the standard 255 character return buffer for the curl() function, TEMP_DIR MUST BE FEWER THAN 237 CHARACTERS IN LENGTH Note also that mysqlclient development libraries must be installed for compiling as well as libcurl I will add to this README as questions are asked, issues raised, etc. -Jeff Walter, maintainer lowadobe@gmail.com