我是一名SAS程序员,他试图通过从安全网站获取一些数据,手动将其记录在我们的SAS数据库上然后报告/验证它们来为我的客户自动生成报告。我的任务是减少手动操作。
我尝试在Sas代码中使用FILENAME URL选项登录页面,但最终导致错误:“SSL错误:缺少CA信任列表”
所以基本上任务是在SAS中传递一个网页,让代码自动通过登录凭据登录网站,打开网页上的链接,从打开的链接页面中获取一些数量/日期。
对我来说,任何有用的页面也会受到赞赏。
由于
答案 0 :(得分:3)
我已经成功使用了CURL工具和SAS(由于SAS 9.1中的一些限制)
我们的想法是通过curl
从SAS拨打systask command
作为外部实用工具。
然后curl做了魔术 - 检索或发布/上传一些内容等。
答案 1 :(得分:2)
正如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保存到数据集中,你就需要解析结果,但这是一个完全不同的问题。
答案 2 :(得分:1)
值得注意的是,在较新版本的SAS中,有PROC HTTP允许您更好地处理请求(GET和POST)以及来自Web服务器的响应。如果URL返回的内容不是平面文件或通过DATA步骤轻松读取,则此功能非常有用。
这里有关于HTTPS的明确说明http://support.sas.com/documentation/cdl/en/proc/64787/HTML/default/viewer.htm#p19qqqyq9te9u3n1oq8fbdta7dqt.htm
答案 3 :(得分:0)
the documentation中提供了登录安全网站的正确方法:
filename foo url 'https://www.b.com/file1.html'
user='jones' prompt;
如果您因上述错误而遇到问题,则可能是您配置了错误的SAS安装或操作系统。有关您网站的详细信息,请参阅this reference,特别是第2部分中的SSLCERT选项。