我想构建一个Web应用程序,该应用程序调用SAS存储的过程并打印结果。我希望在后台处理身份验证。
该Web应用程序是用PHP内置的,我将使用CURL发出请求。
这可能吗?哪些CURL选项是必需的?
答案 0 :(得分:4)
这样做的正确方法(考虑到安全性)是使用其票证API-您可以先通过PHP握手进行CURL请求,以最终获得STP端点的结果。
Step1a)POST请求... / SASLogon / v1 /票证,其中包含用户名和密码的表单编码有效载荷。
Step1b)查看响应标头“位置”(由“ /” [-1]分隔)以获取您的身份验证令牌。
Step2a)向同一第一个URL发出POST请求,并在末尾附加auth令牌,然后将服务URL(service = xxx)(理想情况下是... / SASStoredProcess)传递到正文(格式编码)中/ do)端点。
Step2b)解析响应正文以获取您的票证令牌。
Step3a)使用_program = STP终结点的POST有效负载(形式编码)对服务(... / do?token = [TicketToken])运行一个请求
Step3b)结果将是您请求的结果。
这可能需要一些特定的SAS安装配置,但需要进行常规的票据握手(通常是从内存中键入,而在我面前没有示例)。 SAS非常具体,具体取决于版本和所安装的软件。
您可以使用CURL实现此目的,但我个人认为我喜欢使用更高级别的请求库。
给出的其他答案都是有效的,但在后台进行身份验证,我认为您需要适当的安全性-在每个请求中传递用户名和密码都是安全隐患。在我看来,使用票务系统和握手将是一种“更好”的解决方案。
答案 1 :(得分:3)
首先请按照here中的说明,确保正确配置了存储过程的Web服务器。
创建一个包含以下代码的.php文件。
<?php
$parameters = array('_program' => '/Products/SAS Intelligence Platform/Samples/Sample: Hello World', // PATH TO STORED PROCESS
'_username' => 'mysasusername',
'_password' => '{SAS002}EFC0A34D034F489E2E0E03E840D324D6D30964A3', // ENCODED PASSWORD FROM PROC PWENCODE
'myParam1' => 'abc',
'myParam2' => 123
);
//
// CREATE A NEW CURL INSTANCE AND CONFIGURE IT
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://sas.myserver.com/SASStoredProcess/do?");
curl_setopt($ch, CURLOPT_PORT, 7980); // PORT USED TO MAKE STORED PROCESS REQUESTS
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // DISABLE SSL CERTIFICATE CHECKING - OPTIONAL DEPENDING ON SERVER CERTIFICATE
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // DISABLE SSL CERTIFICATE CHECKING - OPTIONAL DEPENDING ON SERVER CERTIFICATE
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // STORED PROCESS LOGIN INVOLVES MULTIPLE PAGE REQUESTS
curl_setopt($ch, CURLOPT_COOKIEFILE, ""); // STORED PROCESS LOGIN REQUIRES COOKIES
curl_setopt($ch, CURLOPT_COOKIEJAR, ""); // STORED PROCESS LOGIN REQUIRES COOKIES
curl_setopt($ch, CURLOPT_HEADER, true); // DONT SUPPRESS HTTP HEADER INFO
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // SUPPRESS DIRECTLY PRINTING RESULTS WHEN CURL_EXEC IS RUN.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,90); // TIMEOUT LIMIT WHILE TRYING TO CONNECT
curl_setopt($ch, CURLOPT_TIMEOUT, 90); // TIMEOUT WHILE WAITING FOR RESPONSE
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); // SET THIS OPTION LAST. MUST USE HTTP_BUILD_QUERY CALL ELSE YOU WILL BE PRESENTED WITH LOGIN PAGE
//
// EXECUTE IS AND SAVE THE RESULTS THEN CLOSE THE CURL OBJECT
//
$response = curl_exec($ch) ;
//
// PARSE OUT THE HTTP HEADER VS THE BODY
//
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
print $body;
curl_close($ch);
?>
配置以下内容:
配置完成后,在浏览器的地址栏中输入.php文件的URL。您应该看到输出:
Hello World!
列出的PHP代码使用了工作所需的最少选项。它假定您可能还需要解析标头数据以确定结果的内容类型。
此外,在实施上述代码时,请确保所有用户凭据都安全存储。将用户凭据硬编码到源代码中(即使SAS密码已经通过PWENCODE运行)永远不是一个好主意。
答案 2 :(得分:2)
对于通用(非PHP,命令行)答案,这里是单行代码。
curl -v -L -c cookiefile -b cookiefile \
-d "_program=$STP&_username=$USERNAME&_password=$PASSWORD" \
https://yourdomain.com/SASStoredProcess/do
如here所述,需要注意的事情包括:
1)使用cookie文件,以便可以通过SASLogon重定向写入会话令牌(-c),随后读取(-b)。
2)_username和_password参数用于验证(请参阅文档)
3)-v用于详细记录,-L告诉curl遵循重定向(SASLogon)位置