HTTPPOST 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. inputlen = trimmed_length(userinput: %len(userinput));
  44. // Do the curl stuff.
  45. curl_global_init(CURL_GLOBAL_ALL);
  46. main();
  47. curl_global_cleanup();
  48. *inlr = *on; // Exit
  49. *
  50. **************************************************************************
  51. * Main procedure: do the curl job.
  52. **************************************************************************
  53. *
  54. p main b
  55. d main pi
  56. *
  57. d h s * Easy handle
  58. d result s like(CURLcode) Curl return code
  59. d inz(CURLE_OUT_OF_MEMORY)
  60. d errmsgp s * Error string pointer
  61. d response s 52 For error display
  62. d mime s * MIME handle
  63. d mimepart s * MIME part handle
  64. d parthdrs s * inz(*NULL) Part headers
  65. // Create and fill curl handle.
  66. h = curl_easy_init();
  67. if h <> *NULL;
  68. curl_easy_setopt_ccsid(h: CURLOPT_URL: url: 0);
  69. curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1);
  70. mime = curl_mime_init(h);
  71. mimepart = curl_mime_addpart(mime);
  72. curl_mime_name_ccsid(mimepart: 'autofield': 0);
  73. curl_mime_data_ccsid(mimepart: 'program-generated value':
  74. CURL_ZERO_TERMINATED: 0);
  75. mimepart = curl_mime_addpart(mime);
  76. curl_mime_name_ccsid(mimepart: 'userfield': 0);
  77. curl_mime_data_ccsid(mimepart: %subst(userinput: 1: inputlen):
  78. CURL_ZERO_TERMINATED: 0);
  79. mimepart = curl_mime_addpart(mime);
  80. curl_mime_name_ccsid(mimepart: 'ebcdicfield': 0);
  81. curl_mime_data(mimepart: %subst(userinput: 1: inputlen): inputlen);
  82. curl_mime_encoder_ccsid(mimepart: 'base64': 0);
  83. // Avoid server to convert base64 to text.
  84. parthdrs = curl_slist_append_ccsid(parthdrs:
  85. 'Content-Transfer-Encoding: bit': 0);
  86. curl_mime_headers(mimepart: parthdrs: 1);
  87. curl_easy_setopt(h: CURLOPT_MIMEPOST: mime);
  88. // Perform the request.
  89. result = curl_easy_perform(h);
  90. curl_mime_free(mime);
  91. curl_easy_cleanup(h); // Release handle
  92. endif;
  93. // Check for error and report if some.
  94. if result <> CURLE_OK;
  95. errmsgp = curl_easy_strerror_ccsid(result: 0);
  96. response = %str(errmsgp);
  97. dsply '' '*EXT' response;
  98. endif;
  99. p main e
  100. *
  101. **************************************************************************
  102. * Get the length of right-trimmed string
  103. **************************************************************************
  104. *
  105. p trimmed_length b
  106. d trimmed_length pi 10u 0
  107. d string 999999 const options(*varsize)
  108. d length 10u 0 value
  109. *
  110. d len s 10u 0
  111. *
  112. len = %scan(X'00': string: 1: length); // Limit to zero-terminated string
  113. if len = 0;
  114. len = length + 1;
  115. endif;
  116. if len <= 1;
  117. return 0;
  118. endif;
  119. return %checkr(' ': string: len - 1); // Trim right
  120. p trimmed_length e