BookmarkSubscribeRSS Feed
tfabri
Obsidian | Level 7

Hi All,

 

I'm trying to do a API requisition through EG but I have no success in my call. I've tested it in Postman and there it is working normally.

I need passing 6 fields variables on Body, then I think that's need using the PUT, right?

 

Below there is my example, using only one field on body:

 

%let val = "SMS2";

/* Put the body of the JSON content in external file */
filename json_in temp;
data _null_;
file json_in;
put;
put "{";
put '"Tp_SMS":'"&val.";
put "}";
run;


proc http
url="https://xxxxxxxxxxxxxx/xxxxx/xxxx/xxxxx"
method="POST"
ct="application/x-www-form-urlencoded"
in=json_in
    out=posta
headerout=hdrout;
headers
"Host"="xxxxxxx"
"Authorization"="bearer XXXXXXXXXXXXXX"  
"Content-Type"="application/json"
"Content-Length"="xxxxxxx"
"CD_Login"="xxxxxxx";
Run;

How can I solved it?  How I should add others fields varsiables on body - using PUT?

 

Important:  If I use the "Datalines" than "PUT",  with one field - I have success.

 

Any help will be very appreciated.

 

Tks,

TF

5 REPLIES 5
ballardw
Super User

Please show the non-macro version using datalines that does work.

BillM_SAS
SAS Employee

I am not quite sure exactly what you need. But if you want a JSON file with the 6 fields, it might be easier (if you have SAS 9.4) to use the JSON procedure. Here is code I put together that I think creates the file you want:

 

proc json out="./tfabri.json" pretty nosastags;
  write open object;
    write values "SMS2" "&val"; 
    write values "field_2" "field_2_value";
    /* Add the other 4 values */
  write close;
run;

Here are the contents of the file:

{
  "SMS2": "SMS2",
  "field_2": "field_2_value"
}
tfabri
Obsidian | Level 7

Hi Bill, thank you for your answer.

 

I'm still working on this. With your suggestion I can create a JSON file, but when I tried to run HTTP PROC (using this JSON file) I was not successful.

 

FILENAME JSON_IN TEMP;
PROC JSON OUT="C:\TEMP\TESTE_NOVO.JSON" PRETTY NOKEYS NOSASTAGS;
WRITE OPEN OBJECT;
WRITE VALUES "TP_SMS" "CCSMS"; 
WRITE VALUES "NM_REMETENTESMS" "TESTE";
WRITE VALUES "NR_TELEFONECELULARSMS" "1";
WRITE VALUES "TX_MENSAGEMSMS" "MSG";
WRITE VALUES "DT_PARAENVIOSMS" "1";
WRITE VALUES "DT_LIMITEENVIOSMS" "S";
WRITE VALUES "DS_CHAVEORIGEMSMS" "1";
WRITE CLOSE;
RUN;


FILENAME POSTA "C:\TEMP\POSTA.TXT";
PROC HTTP
URL="HTTPS://***********/*******/CORPO/SMS/INCLUISMS"
METHOD="POST"
CT="APPLICATION/X-WWW-FORM-URLENCODED" /*JSON" */
IN=JSON_IN
    OUT=POSTA;
HEADERS
"HOST"="*******"
"AUTHORIZATION"="BEARER &TOKEN"  
"CONTENT-TYPE"="APPLICATION/JSON"
"CONTENT-LENGTH"="**"
"CD_LOGIN"="******";
RUN;

%PUT HTTP STATUS CODE = &SYS_PROCHTTP_STATUS_CODE. : &SYS_PROCHTTP_STATUS_PHRASE.;

Any additional suggestion?

 

Thanks a lot.

Tf

BillM_SAS
SAS Employee

I am not a PROC HTTP expert but, I do not see how the JSON file you created in being used by the HTTP code based on what you posted. You are writing the JSON to the teste_novo.json file. The input for PROC HTTP is specified as JSON_IN. The filename statement specifies JSON_IN as the TEMP device type. The TEMP device just creates a temporary file for the lifetime of the FILENAME statement. In the SAS code that you posted, I do not see how the JSON file gets placed into the JSON_IN temporary location. To use the JSON file you created, I think that the PROC HTTP statement needs to have the IN argument modified to:

 

     IN="C:\temp\teste_novo.json"

tfabri
Obsidian | Level 7

Hi Bill, thank you for your contact.

 

I've tried it on past without success. EG returned the error below:

 

ERROR: The tcpSockRead call failed. The system error is 'The connection was reset by a peer.'.
ERROR: Connection has been closed.​

 

I'm still trying found a way to solve it.  Any new idea / tips / suggestion, will be very appreciated.

 

Thank you again,

TF

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 1363 views
  • 1 like
  • 3 in conversation