1

我是一名 SAS 程序员,他试图为我的客户自动生成报告,该客户通过从安全网站获取一些数据来创建报告,手动将其记录在我们的 SAS 数据库中,然后对其进行报告/验证。我的任务是减少人工。

我尝试在 Sas 代码中使用 FILENAME URL 选项登录到该页面,但它最终给了我错误:“SSL 错误:缺少 CA 信任列表”

所以基本上任务是在 SAS 中传递一个网页,让代码通过登录凭据自动登录到网站,打开网页上的链接并从打开的链接页面中获取一些金额/日期。

任何对我有用的页面也将不胜感激。

谢谢

4

4 回答 4

3

我已经成功地将CURL工具与 SAS 一起使用(由于 SAS 9.1 中的一些限制)

这个想法是从 SAS 调用curlviasystask command作为外部实用程序。然后 curl 发挥作用 - 检索或发布/上传一些内容等。

于 2013-09-09T11:44:17.970 回答
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 保存到你的数据集中,你就需要解析结果,但这是一个完全不同的问题。

于 2013-09-09T21:48:22.803 回答
1

值得注意的是,在较新版本的 SAS 中,PROC HTTP 允许您更好地处理来自 Web 服务器的请求(GET 和 POST)和响应。如果 URL 返回的内容不是平面文件或通过 DATA 步轻松读取,这将很有用。

这里有关于 HTTPS 的明确说明 http://support.sas.com/documentation/cdl/en/proc/64787/HTML/default/viewer.htm#p19qqqyq9te9u3n1oq8fbdta7dqt.htm

于 2013-09-09T15:31:58.123 回答
0

文档中给出了登录安全站点的正确方法:

filename foo url 'https://www.b.com/file1.html'
     user='jones' prompt;

如果您遇到上述错误的问题,则可能是您的 SAS 安装或操作系统配置错误。请参阅此参考资料,特别是第 2 节中的 SSLCERT 选项,了解对您的站点有用的更多具体细节。

于 2013-09-09T11:12:12.970 回答