sas - 如何通过 EG 上的 API (POST) 发送 .JSON 文件?
问题描述
我试图通过 SAS Enterprise Guide 发送 JSON 文件,但我相信我在代码上犯了一些错误。
下面是我的代码:
>> 生成 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 时出现问题:
>> 调用 API 发布
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) - 没有成功。
有没有人有过类似的经历?如何使用 "IN=" 发送 JSON(文件)?可能吗?
伙计们!
解决方案
当我使用只有一个参数的“数据文件”时,它工作正常。我在 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.;
没有 java_http选项:错误:tcpSockRead 调用失败。系统错误是“连接已被对等方重置。”。错误:连接已关闭。
使用java_http选项:错误:Java 执行模式不支持语句头。
谢了。再次!!!特遣部队
推荐阅读
- c# - 如何处理 1 位和 4 位图像?
- angular - 如何让 switchMap 在 combineLatest 中触发?
- azure - 带有 VPN 的 Azure 虚拟机
- html - Django Template full width CSS
- javascript - vue2 highlight updated rows
- c++ - boost::any 结构体和无符号整数
- azure - 通过 Ansible 创建 VM 并将应用程序部署到 Azure VM
- angularjs - 如何避免在页面加载时显示 AngularJS 指令代码
- wildcard - 删除以字母 S 开头的 4 个字符长的 dos 文件夹
- css - 如何使用 Greensock 缩放和旋转图像?