我是一名 SAS 程序员,他试图为我的客户自动生成报告,该客户通过从安全网站获取一些数据来创建报告,手动将其记录在我们的 SAS 数据库中,然后对其进行报告/验证。我的任务是减少人工。
我尝试在 Sas 代码中使用 FILENAME URL 选项登录到该页面,但它最终给了我错误:“SSL 错误:缺少 CA 信任列表”
所以基本上任务是在 SAS 中传递一个网页,让代码通过登录凭据自动登录到网站,打开网页上的链接并从打开的链接页面中获取一些金额/日期。
任何对我有用的页面也将不胜感激。
谢谢
我已经成功地将CURL工具与 SAS 一起使用(由于 SAS 9.1 中的一些限制)
这个想法是从 SAS 调用curlviasystask command作为外部实用程序。然后 curl 发挥作用 - 检索或发布/上传一些内容等。
正如 Vasja 所说,CURL 是这样做的方法。在下面的示例中,我使用了命名管道,而不是通过 systask 调用 curl。这是代码示例(尽管它不适合胆小的人):
**
** GLOLBALS
*;
%let curl_executable = d:\xxx\curl.exe;
%let maxchars = 3000;
%let userpass = User:Pass;
data _null_;
**
** USE THIS VERSION IF YOU JUST HAVE A STRAIGHT URL TO RETRIEVE
*;
call symput ('curl_cmd', "&curl_executable -k -u &userpass %nrstr(https://www.mysite.com/index.php" );
run;
**
** USE THIS VERSION IF YOU NEED TO PASS IN PARAMETERS TO THE URL
**
** NOTE THAT THE CARROT (^) IS REQUIRED TO MASK THE AMPERSAND WHEN
** BEING PROCESSED THROUGHT THE COMMAND LINE PIPE. THE LOG WILL STILL COMPLAIN ABOUT
** THE MACRO VARIABLE TODT NOT BEING RESOLVED EVEN THOUGH IT IS.
*;
/*%let from=2013-01-01;*/
/*%let to =2013-01-01;*/
/*data _null_;*/
/* call symput ('curl_cmd', "&curl_executable -k -u &userpass %nrstr(https://www.mysite.com/index.php?FromDT=)&from^%nrstr(&)ToDT=&to" ); */
/*run;*/
**
** CONNECT TO SITE AND RETURN HTML RESULT TO A DATASET
*;
filename curl pipe "&curl_cmd" lrecl=32767;
data tmp;
length xml $&maxchars;
infile curl truncover end=eof;
input @1 xml $&maxchars..;
/*
** SAFETY CHECK 1 - TEST FOR TRUNCATION. LINE SHOULD NOT BE > 32K.
** THIS CAN BE FIXED BY PIPING THROUGH SED AND INSERTING LINE BREAKS IF NECESSARY.
*/
if lengthn(xml) ge &maxchars then do;
put "ERROR: FAILED FOR &from BECAUSE XML WAS > &maxchars CHARS";
put "OBSERVATION: " _n_;
put xml;
stop;
end;
run;
filename curl clear;
一旦你有了这个工作并将 HTML 保存到你的数据集中,你就需要解析结果,但这是一个完全不同的问题。
值得注意的是,在较新版本的 SAS 中,PROC HTTP 允许您更好地处理来自 Web 服务器的请求(GET 和 POST)和响应。如果 URL 返回的内容不是平面文件或通过 DATA 步轻松读取,这将很有用。
这里有关于 HTTPS 的明确说明 http://support.sas.com/documentation/cdl/en/proc/64787/HTML/default/viewer.htm#p19qqqyq9te9u3n1oq8fbdta7dqt.htm