xref: /curl/packages/OS400/rpg-examples/SIMPLE1 (revision 7c142d05)
1      * Curl simple URL request
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      * Simple example to request the URL given as command line parameter and
34      * output its response.
35      *
36     d                 pi
37     d url                          120
38      *
39     d urllen          s             10u 0                                      URL length
40      *
41      **************************************************************************
42      *
43     c                   eval      urllen = trimmed_length(url: %len(url))
44      *
45      * Do the curl stuff.
46      *
47     c                   callp     curl_global_init(CURL_GLOBAL_ALL)
48     c                   callp     main
49     c                   callp     curl_global_cleanup()
50     c                   seton                                            lr    Exit
51      *
52      **************************************************************************
53      * Main procedure: do the curl job.
54      **************************************************************************
55      *
56     p main            b
57     d main            pi
58      *
59     d h               s               *                                        Easy handle
60     d result          s                   like(CURLcode)                       Curl return code
61     d                                     inz(CURLE_OUT_OF_MEMORY)
62     d errmsgp         s               *                                        Error string pointer
63     d response        s             52                                         For error display
64      *
65      * Create and fill curl handle.
66      *
67     c                   eval      h = curl_easy_init()
68     c                   if        h <> *NULL
69     c                   callp     curl_easy_setopt_ccsid(h: CURLOPT_URL:
70     c                               %subst(url: 1: urllen): 0)
71     c                   callp     curl_easy_setopt_long(h:
72     c                               CURLOPT_FOLLOWLOCATION: 1)
73      *
74      * Perform the request.
75      *
76     c                   eval      result = curl_easy_perform(h)
77     c                   callp     curl_easy_cleanup(h)                         Release handle
78     c                   endif
79      *
80      * Check for error and report if some.
81      *
82     c                   if        result <> CURLE_OK
83     c                   eval      errmsgp = curl_easy_strerror_ccsid(result: 0)
84     c                   eval      response = %str(errmsgp)
85     c                   dsply                   response
86     c                   endif
87     p main            e
88      *
89      **************************************************************************
90      * Get the length of right-trimmed string
91      **************************************************************************
92      *
93     p trimmed_length  b
94     d trimmed_length  pi            10u 0
95     d  string                   999999    const options(*varsize)
96     d  length                       10u 0 value
97      *
98     d len             s             10u 0
99      *
100     c                   eval      len = %scan(X'00': string: 1: length)        Limit 0-terminated
101     c                   if        len = 0
102     c                   eval      len = length + 1
103     c                   endif
104     c                   if        len <= 1
105     c                   return    0
106     c                   endif
107     c                   return    %checkr(' ': string: len - 1)                Trim right
108     p trimmed_length  e
109