Как отправить файл .JSON через API (POST) на EG? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь отправить файл JSON через SAS Enterprise Guide, но я считаю, что я делаю некоторую ошибку с кодом.

Ниже приведен мой код:

>> Генерация файла JSON:

   data teste30;
    set MATABLES.TEMPJSON;
     RESP=cat(CUSTOMERID,"|",RESPTRACKING_CD);
     CODSMS="WXS";  
     MOBILE="5511111111";
     DATAPARA="09/05/2019";
     DATALIMI="10/05/2019";
     REMETENTE="TF";
    run;    


filename code temp;
data _null_;
  set teste30;
  file code ;
  put 'WRITE OPEN OBJECT;'
    / 'WRITE VALUES "TP_SMS" ' CODSMS :$quote. ';' 
    / 'WRITE VALUES "NM_REMETENTESMS" ' REMETENTE :$quote. ';'
    / 'WRITE VALUES "NR_TELEFONECELULARSMS" ' MOBILE :$quote. ';'
    / 'WRITE VALUES "TX_MENSAGEMSMS" ' msgtext :$quote. ';'
    / 'WRITE VALUES "DT_PARAENVIOSMS" ' DATAPARA  :$quote. ';'
    / 'WRITE VALUES "DT_LIMITEENVIOSMS" ' DATALIMI  :$quote. ';'
    / 'WRITE VALUES "DS_CHAVEORIGEMSMS" ' RESP :$quote. ';'
    / 'WRITE CLOSE;'
  ;
run;

proc json out="%sysfunc(getoption(WORK))/TEST.json" pretty nokeys nosastags;
  write open array; /* container for all the data */
  %include code;
  write close;    /* container for all the data */
run; 

Мой JSON выглядит нормально.Проблема возникает, когда я пытаюсь отправить его, вызывая API:

>> CALLING API POST

FILENAME POSTA "C:\TEMP\POSTA.TXT";
FILENAME code2 "%sysfunc(getoption(WORK))/test.json";
PROC HTTP
    URL="HTTPS://*********/SMS/INCLUISMS"
    CT="APPLICATION/JSON"
    IN=code2
    METHOD="POST"
    OUT=POSTA;
    HEADERS
        "HOST"="*****"
        "AUTHORIZATION"="BEARER xxxxxxxxxxxx"  
        "CONTENT-TYPE"="APPLICATION/JSON"
        "CONTENT-LENGTH"="xx"

RUN;
%echoFile(fn=code2);


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

В журнале EG возвращается эта ошибка: ОШИБКА:Ошибка вызова tcpSockRead.Системная ошибка: «Соединение было сброшено узлом».ОШИБКА: Соединение было закрыто.

Я попытался ввести путь и имя файла (физическое) в "IN =" (пример: IN = "C: \ TEMP \ Test.json) - безуспешно.

Кто-нибудь сталкивался с подобным опытом? Как я могу отправить JSON (файл), используя «IN =»? Возможно ли это?

Tks Guys!

1 Ответ

0 голосов
/ 13 мая 2019

Когда я использую «файлы данных» только с одним параметром, он работает нормально. У меня есть успех на вызов API. Ниже приведен код:

/* Put the body of the JSON content in external file */
filename json_in temp;
data _null_;
file json_in;
input;
put _infile_;
datalines;
{ "Tp_Email":"CCA001" }
run;

filename posta "c:\temp\posta.txt";
filename post1 temp;
proc http
	url="https://***********/*****/***/ObterEmailTexto"
	method="POST"
	ct="application/x-www-form-urlencoded"
	in=json_in
    out=posta;
	headers
		"Host"="****"
		"Authorization"="bearer &TOKEN"  
		"Content-Type"="application/json"
		"Content-Length"="**"
		"CD_Login"="*****";
Run;
/*
data _null_;
   infile posta;
   input;
   put _infile_;
run;
*/
%put HTTP Status code = &SYS_PROCHTTP_STATUS_CODE. : &SYS_PROCHTTP_STATUS_PHRASE.;

Когда я пытался передать файл JSON по телу, произошла ошибка.

FILENAME POSTA "C:\TEMP\POSTA.TXT";
FILENAME code2 "%sysfunc(getoption(WORK))/test.json";
PROC HTTP java_http
	URL="HTTPS://**********/*****/SMS/INCLUISMS"
   	ct="application/x-www-form-urlencoded"
	IN=code2
	METHOD="POST"
    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.;

Witout java_http опции: ОШИБКА: сбой вызова tcpSockRead. Системная ошибка: «Соединение было сброшено узлом». ОШИБКА: соединение было закрыто.

С java_http опции: ОШИБКА: ЗАГОЛОВОК оператора не поддерживается в режиме выполнения Java.

Tks. снова!!! TF

...