1*6236dae4SAndroid Build Coastguard Worker * Curl simple URL request (free-format RPG) 2*6236dae4SAndroid Build Coastguard Worker * 3*6236dae4SAndroid Build Coastguard Worker ctl-opt dftactgrp(*NO) actgrp(*NEW) 4*6236dae4SAndroid Build Coastguard Worker option(*NOSHOWCPY) 5*6236dae4SAndroid Build Coastguard Worker bnddir('CURL'); 6*6236dae4SAndroid Build Coastguard Worker * 7*6236dae4SAndroid Build Coastguard Worker ************************************************************************** 8*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _ 9*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| | 10*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | | 11*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___ 12*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____| 13*6236dae4SAndroid Build Coastguard Worker * 14*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al. 15*6236dae4SAndroid Build Coastguard Worker * 16*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which 17*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms 18*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html. 19*6236dae4SAndroid Build Coastguard Worker * 20*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell 21*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is 22*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file. 23*6236dae4SAndroid Build Coastguard Worker * 24*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 25*6236dae4SAndroid Build Coastguard Worker * ANY KIND, either express or implied. 26*6236dae4SAndroid Build Coastguard Worker * 27*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl 28*6236dae4SAndroid Build Coastguard Worker * 29*6236dae4SAndroid Build Coastguard Worker ************************************************************************** 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Worker /include H,CURL.INC 32*6236dae4SAndroid Build Coastguard Worker 33*6236dae4SAndroid Build Coastguard Worker * Simple free-format RPG program to request the URL given as command line 34*6236dae4SAndroid Build Coastguard Worker * parameter and output its response. 35*6236dae4SAndroid Build Coastguard Worker 36*6236dae4SAndroid Build Coastguard Worker dcl-pi *N; 37*6236dae4SAndroid Build Coastguard Worker url char(120); 38*6236dae4SAndroid Build Coastguard Worker end-pi; 39*6236dae4SAndroid Build Coastguard Worker 40*6236dae4SAndroid Build Coastguard Worker dcl-s urllen int(10); // URL length 41*6236dae4SAndroid Build Coastguard Worker 42*6236dae4SAndroid Build Coastguard Worker ************************************************************************** 43*6236dae4SAndroid Build Coastguard Worker 44*6236dae4SAndroid Build Coastguard Worker urllen = trimmed_length(url: %len(url)); 45*6236dae4SAndroid Build Coastguard Worker 46*6236dae4SAndroid Build Coastguard Worker // Do the curl stuff. 47*6236dae4SAndroid Build Coastguard Worker 48*6236dae4SAndroid Build Coastguard Worker curl_global_init(CURL_GLOBAL_ALL); 49*6236dae4SAndroid Build Coastguard Worker main(); 50*6236dae4SAndroid Build Coastguard Worker curl_global_cleanup(); 51*6236dae4SAndroid Build Coastguard Worker *inlr = *on; // Exit 52*6236dae4SAndroid Build Coastguard Worker 53*6236dae4SAndroid Build Coastguard Worker ************************************************************************** 54*6236dae4SAndroid Build Coastguard Worker * Main procedure: do the curl job. 55*6236dae4SAndroid Build Coastguard Worker ************************************************************************** 56*6236dae4SAndroid Build Coastguard Worker 57*6236dae4SAndroid Build Coastguard Worker dcl-proc main; 58*6236dae4SAndroid Build Coastguard Worker dcl-pi *N end-pi; 59*6236dae4SAndroid Build Coastguard Worker 60*6236dae4SAndroid Build Coastguard Worker dcl-s h pointer; // Easy handle 61*6236dae4SAndroid Build Coastguard Worker dcl-s result like(CURLcode) inz(CURLE_OUT_OF_MEMORY); // Curl return code 62*6236dae4SAndroid Build Coastguard Worker dcl-s errmsgp pointer; // Error string pointer 63*6236dae4SAndroid Build Coastguard Worker dcl-s response char(52); // For error display 64*6236dae4SAndroid Build Coastguard Worker 65*6236dae4SAndroid Build Coastguard Worker // Create and fill curl handle. 66*6236dae4SAndroid Build Coastguard Worker 67*6236dae4SAndroid Build Coastguard Worker h = curl_easy_init(); 68*6236dae4SAndroid Build Coastguard Worker if h <> *NULL; 69*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt_ccsid(h: CURLOPT_URL: %subst(url: 1: urllen): 70*6236dae4SAndroid Build Coastguard Worker 0); 71*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1); 72*6236dae4SAndroid Build Coastguard Worker 73*6236dae4SAndroid Build Coastguard Worker // Perform the request. 74*6236dae4SAndroid Build Coastguard Worker 75*6236dae4SAndroid Build Coastguard Worker result = curl_easy_perform(h); 76*6236dae4SAndroid Build Coastguard Worker curl_easy_cleanup(h); // Release handle 77*6236dae4SAndroid Build Coastguard Worker endif; 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker // Check for error and report if some. 80*6236dae4SAndroid Build Coastguard Worker 81*6236dae4SAndroid Build Coastguard Worker if result <> CURLE_OK; 82*6236dae4SAndroid Build Coastguard Worker errmsgp = curl_easy_strerror_ccsid(result: 0); 83*6236dae4SAndroid Build Coastguard Worker response = %str(errmsgp); 84*6236dae4SAndroid Build Coastguard Worker dsply '' '*EXT' response; 85*6236dae4SAndroid Build Coastguard Worker endif; 86*6236dae4SAndroid Build Coastguard Worker end-proc; 87*6236dae4SAndroid Build Coastguard Worker * 88*6236dae4SAndroid Build Coastguard Worker ************************************************************************** 89*6236dae4SAndroid Build Coastguard Worker * Get the length of right-trimmed string 90*6236dae4SAndroid Build Coastguard Worker ************************************************************************** 91*6236dae4SAndroid Build Coastguard Worker * 92*6236dae4SAndroid Build Coastguard Worker dcl-proc trimmed_length; 93*6236dae4SAndroid Build Coastguard Worker dcl-pi *N uns(10); 94*6236dae4SAndroid Build Coastguard Worker string char(9999999) const options(*varsize); 95*6236dae4SAndroid Build Coastguard Worker length uns(10) value; 96*6236dae4SAndroid Build Coastguard Worker end-pi; 97*6236dae4SAndroid Build Coastguard Worker 98*6236dae4SAndroid Build Coastguard Worker dcl-s len uns(10); 99*6236dae4SAndroid Build Coastguard Worker 100*6236dae4SAndroid Build Coastguard Worker len = %scan(X'00': string: 1: length); // Limit to zero-terminated string 101*6236dae4SAndroid Build Coastguard Worker if len = 0; 102*6236dae4SAndroid Build Coastguard Worker len = length + 1; 103*6236dae4SAndroid Build Coastguard Worker endif; 104*6236dae4SAndroid Build Coastguard Worker if len <= 1; 105*6236dae4SAndroid Build Coastguard Worker return 0; 106*6236dae4SAndroid Build Coastguard Worker endif; 107*6236dae4SAndroid Build Coastguard Worker return %checkr(' ': string: len - 1); // Trim right 108*6236dae4SAndroid Build Coastguard Worker end-proc; 109