1 * Curl MIME post data and display response 2 * 3 h DFTACTGRP(*NO) ACTGRP(*NEW) 4 h OPTION(*NOSHOWCPY) 5 h BNDDIR('CURL') 6 * 7 ************************************************************************** 8 * _ _ ____ _ 9 * Project ___| | | | _ \| | 10 * / __| | | | |_) | | 11 * | (__| |_| | _ <| |___ 12 * \___|\___/|_| \_\_____| 13 * 14 * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 15 * 16 * This software is licensed as described in the file COPYING, which 17 * you should have received as part of this distribution. The terms 18 * are also available at https://curl.se/docs/copyright.html. 19 * 20 * You may opt to use, copy, modify, merge, publish, distribute and/or sell 21 * copies of the Software, and permit persons to whom the Software is 22 * furnished to do so, under the terms of the COPYING file. 23 * 24 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 25 * ANY KIND, either express or implied. 26 * 27 * SPDX-License-Identifier: curl 28 * 29 ************************************************************************** 30 * 31 /include H,CURL.INC 32 * 33 * Example to HTTP POST data using the MIME API. Displays the response. 34 * 35 d pi 36 d userinput 120 User data to post 37 * 38 d url c 'http://httpbin.org/anything' 39 * 40 * 41 d inputlen s 10u 0 User input length 42 ************************************************************************** 43 44 inputlen = trimmed_length(userinput: %len(userinput)); 45 46 // Do the curl stuff. 47 48 curl_global_init(CURL_GLOBAL_ALL); 49 main(); 50 curl_global_cleanup(); 51 *inlr = *on; // Exit 52 * 53 ************************************************************************** 54 * Main procedure: do the curl job. 55 ************************************************************************** 56 * 57 p main b 58 d main pi 59 * 60 d h s * Easy handle 61 d result s like(CURLcode) Curl return code 62 d inz(CURLE_OUT_OF_MEMORY) 63 d errmsgp s * Error string pointer 64 d response s 52 For error display 65 d mime s * MIME handle 66 d mimepart s * MIME part handle 67 d parthdrs s * inz(*NULL) Part headers 68 69 // Create and fill curl handle. 70 71 h = curl_easy_init(); 72 if h <> *NULL; 73 curl_easy_setopt_ccsid(h: CURLOPT_URL: url: 0); 74 curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1); 75 mime = curl_mime_init(h); 76 mimepart = curl_mime_addpart(mime); 77 curl_mime_name_ccsid(mimepart: 'autofield': 0); 78 curl_mime_data_ccsid(mimepart: 'program-generated value': 79 CURL_ZERO_TERMINATED: 0); 80 mimepart = curl_mime_addpart(mime); 81 curl_mime_name_ccsid(mimepart: 'userfield': 0); 82 curl_mime_data_ccsid(mimepart: %subst(userinput: 1: inputlen): 83 CURL_ZERO_TERMINATED: 0); 84 mimepart = curl_mime_addpart(mime); 85 curl_mime_name_ccsid(mimepart: 'ebcdicfield': 0); 86 curl_mime_data(mimepart: %subst(userinput: 1: inputlen): inputlen); 87 curl_mime_encoder_ccsid(mimepart: 'base64': 0); 88 // Avoid server to convert base64 to text. 89 parthdrs = curl_slist_append_ccsid(parthdrs: 90 'Content-Transfer-Encoding: bit': 0); 91 curl_mime_headers(mimepart: parthdrs: 1); 92 curl_easy_setopt(h: CURLOPT_MIMEPOST: mime); 93 94 // Perform the request. 95 96 result = curl_easy_perform(h); 97 curl_mime_free(mime); 98 curl_easy_cleanup(h); // Release handle 99 endif; 100 101 // Check for error and report if some. 102 103 if result <> CURLE_OK; 104 errmsgp = curl_easy_strerror_ccsid(result: 0); 105 response = %str(errmsgp); 106 dsply '' '*EXT' response; 107 endif; 108 p main e 109 * 110 ************************************************************************** 111 * Get the length of right-trimmed string 112 ************************************************************************** 113 * 114 p trimmed_length b 115 d trimmed_length pi 10u 0 116 d string 999999 const options(*varsize) 117 d length 10u 0 value 118 * 119 d len s 10u 0 120 * 121 len = %scan(X'00': string: 1: length); // Limit to zero-terminated string 122 if len = 0; 123 len = length + 1; 124 endif; 125 if len <= 1; 126 return 0; 127 endif; 128 return %checkr(' ': string: len - 1); // Trim right 129 p trimmed_length e 130