quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

HTTPPOST (5561B)


      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 null-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