A newer version of this documentation is available.

View Latest

Function: Basic cURL POST

      +

      Goal: Perform a simple cURL POST using an external REST endpoint.

      • This function basicCurlPost communicates with a public REST echo service.

      • Requires Eventing Storage (or metadata collection) and a "source" collection.

      • Needs a Binding of type URL Alias (as documented in the Scriptlet).

      • Will operate on any mutation of the KEY "make_curl_request::1".

      • The actual cURL request from the Eventing Function will be equivalent to (but test to make sure the service is live):

        curl -q 'https://postman-echo.com/post' -d '{ "myboolean": true }'
      • Only logs the REST response JSON payload to the Application log file.

      • basicCurlPost

      • Input Data/Mutation

      • Output Data/Logged

      // To run configure the settings for this Function, basicCurlPost, as follows:
      //
      // Version 7.0+
      //   "Listen to Location"
      //     bulk.data.source
      //   "Eventing Storage"
      //     rr100.eventing.metadata
      //   Binding(s)
      //    1. "binding type", "alias name...",   "URL...",                    "misc.",
      //       "URL alias",    "curlEchoApi",     "https://postman-echo.com/", "no auth"
      //
      // Version 6.X
      //   "Source Bucket"
      //     source
      //   "MetaData Bucket"
      //     metadata
      //   Binding(s)
      //    1. "binding type", "alias name...",   "URL...",                    "misc.",
      //       "URL alias",    "curlEchoApi",     "https://postman-echo.com/", "no auth"
      
      
      function OnUpdate(doc, meta) {
          // You would typically filter to mutations of interest
          if (meta.id !== 'make_curl_request::1') return;
          try {
              // only make a cURL POST request we see a mutation on the above KEY
              var request = {
                  path: 'post',   // can also do 'get' in this API
                  body: {
                      "myboolean": true
                  }
              };
              //  perform the cURL request using the URL alias from the settings
              var response = curl('POST', curlEchoApi, request);
              if (response.status != 200 && response.status != 302) {
                  log("cURL POST failed response.status:",response.status)
              } else {
                  log("cURL POST success, response.body:",response.body)
                  // optional write to a bucket - requires a binding alias in settings
                  // note the response.body.json is the echo back of request.body
                  // dst_col[meta.id] = response.body;
              }
          } catch (e) {
              log("cURL request had an exception:",e)
          }
      }
      INPUT: KEY make_curl_request::1
      
      {
        "anything": 1
      }
      2021-07-18T19:37:35.596-07:00 [INFO] "cURL POST success, response.body:"
      {
          "args": {},
          "data": {
              "myboolean": true
          },
          "files": {},
          "form": {},
          "headers": {
              "x-forwarded-proto": "https",
              "x-forwarded-port": "443",
              "host": "postman-echo.com",
              "x-amzn-trace-id": "Root=1-60f4e56f-2cfd45076d474c35198f8278",
              "content-length": "18",
              "user-agent": "libcurl/7.66.0-DEV couchbase/evt-7.0.0-0000-ee (eventing)",
              "accept": "*/*",
              "accept-encoding": "deflate, gzip",
              "content-type": "application/json"
          },
          "json": {
              "myboolean": true
          },
          "url": "https://postman-echo.com/post"
      }