How can I convert CURL command to PL/SQL?

489 Views Asked by At

I have a curl command, and I need to use this command in my program using PL/SQL.

This is the command:

curl -X 'POST' \
  'https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance' \
  -H 'accept: application/json' \
  -H 'OTP: 123345' \
  -H 'Accept-Version: V2' \
  -H 'Content-Type: application/json' \
  -d '{
  "csr": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tL1WVh3eUxUSXpOSHd6TFRNMU5ERWYKTUIwR0NnbVNKb21UOGl4a0FRRU1Eek14TURFM05UTTVOelF3TURBd016RU5NQXNHQTFVRURBd0VNVEV3TURFUQpNQTRHQTFVRUdnd0hXbUYwWTJFZ016RVlNQllHQTFVRUR3d1BSbTl2WkNCQ2RYTnphVzVsYzNNek1Bb0dDQ3FHClNNNDlCQU1DQTBjQU1FUUNJQ3JyTzdtSzZWZTZNTmIrSlNJRkRmK0FGMjhqV2ZJYTNIdzlhWEdVOS9KbkFpQXIKSnBVc0h4Z1RrOGtQZTRQSnNJVGJJYXlTeUh2emZwdHFFTWZEajdQN2F3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0t"
}'

what i tried :

i searched about a CURL converter and i found this great web site :

https://curlconverter.com

it is very helpful a use it to convert CURL to Python command , but i did not find pl SQL

can any one help me please.

thanks

1

There are 1 best solutions below

0
On

Hope this helps...

create a function as below and call the function with endpoint and json string as parameters.

CREATE OR REPLACE FUNCTION SEND_DB_REQUST (
                                        P_API     VARCHAR2,
                                        P_CONTENT VARCHAR2
                                      ) RETURN VARCHAR2
IS
REQ UTL_HTTP.REQ;
RES UTL_HTTP.RESP;
BUFFER VARCHAR2(4000); 
RESPONS VARCHAR2(4000);
BEGIN
 -- Defined Http Version And Request Type
 REQ := UTL_HTTP.BEGIN_REQUEST(P_API, 'POST',' HTTP/1.1');

 -- Defined Browser Type
 UTL_HTTP.SET_HEADER(REQ, 'user-agent', 'mozilla/4.0'); 
 
 -- Defined Content Type (JSON - XML .. etc)
 UTL_HTTP.SET_HEADER(REQ, 'content-type', 'application/json'); 
 UTL_HTTP.SET_HEADER(REQ, 'accept', 'application/json'); 
 UTL_HTTP.SET_HEADER(REQ, 'OTP', '123345'); 
 UTL_HTTP.SET_HEADER(REQ, 'Accept-Version', 'V2'); 

 -- Defined Content Length
 UTL_HTTP.SET_HEADER(REQ, 'Content-Length', LENGTH(P_CONTENT));

 -- Sent HTTP Request
 UTL_HTTP.WRITE_TEXT(REQ, P_CONTENT);
 RES := UTL_HTTP.GET_RESPONSE(REQ);


 -- Get The Response From The HTTP Call
 BEGIN
   LOOP
     UTL_HTTP.READ_LINE(RES, BUFFER);
     RESPONS := RESPONS || BUFFER;
   END LOOP;
   UTL_HTTP.END_RESPONSE(RES);
   RETURN RESPONS;
 EXCEPTION
   WHEN UTL_HTTP.END_OF_BODY THEN UTL_HTTP.END_RESPONSE(RES);
   RETURN RESPONS;
 END;
END;

like below

SELECT
SEND_DB_REQUST (
                'https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance',
                '"csr": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tL1WVh3eUxUSXpOSHd6TFRNMU5ERWYKTUIwR0NnbVNKb21UOGl4a0FRRU1Eek14TURFM05UTTVOelF3TURBd016RU5NQXNHQTFVRURBd0VNVEV3TURFUQpNQTRHQTFVRUdnd0hXbUYwWTJFZ016RVlNQllHQTFVRUR3d1BSbTl2WkNCQ2RYTnphVzVsYzNNek1Bb0dDQ3FHClNNNDlCQU1DQTBjQU1FUUNJQ3JyTzdtSzZWZTZNTmIrSlNJRkRmK0FGMjhqV2ZJYTNIdzlhWEdVOS9KbkFpQXIKSnBVc0h4Z1RrOGtQZTRQSnNJVGJJYXlTeUh2emZwdHFFTWZEajdQN2F3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0t"'
                )
FROM DUAL;

Note: user should have permission granted to execute utl_http package