SAS-自动登录安全网站,打开其中的链接并获取数据

时间:2013-09-09 09:23:57

标签: security url sas filenames autologin

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

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

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

对我来说,任何有用的页面也会受到赞赏。

由于

4 个答案:

答案 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选项。