我想构建一个调用 SAS 存储过程并打印结果的 Web 应用程序。我希望在幕后处理身份验证。
Web 应用程序是用 PHP 构建的,我将使用 CURL 来发出请求。
这可能吗?哪些 CURL 选项是必需的?
我想构建一个调用 SAS 存储过程并打印结果的 Web 应用程序。我希望在幕后处理身份验证。
Web 应用程序是用 PHP 构建的,我将使用 CURL 来发出请求。
这可能吗?哪些 CURL 选项是必需的?
执行此操作的正确方法(考虑到安全性)是使用他们的票证 API - 您可以使用 PHP 进行 CURL 请求,首先握手,最终获得 STP 端点的结果。
Step1a) POST 请求 .../SASLogon/v1/tickets 带有用户名和密码的表单编码有效负载。
Step1b) 查看响应头“Location”(由“/”[-1] 分割)以获取您的身份验证令牌。
Step2a) 向相同的第一个 url 发出 POST 请求,并在末尾附加身份验证令牌 - 并在正文中传递服务 url (service=xxx) (理想情况下是 .../SASStoredProcess/do)端点。
Step2b) 为您的票证解析响应正文。
Step3a) Run a request to the service (the .../do?token=[TicketToken]) with a POST payload (form encoded) of _program = STP endpoint
Step3b) Results will be the result of your request.
This probably requires some specific SAS installation config things setup- but is the general ticket handshake (generally- typing from memory, not with example in front of me). SAS is very specific depending on the version and what the install you have is.
You can achieve this with CURL, but in my personal opinion I like using higher level request libraries.
The other answers given are both valid- but auth-behind the scenes I assume you want a proper level of security- passing the username and password in each request is a security risk. Using the ticket system and handshake would be a "better" form solution in my mind.
首先,按照此处的说明,确保您的存储过程 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 代码使用了工作所需的最少选项。它假定在某些时候您可能还想解析标题数据以确定结果的 CONTENT-TYPE。
此外,在实现上述代码时,请确保安全存储任何用户凭据。将用户凭据硬编码到源代码中绝不是一个好主意(即使 SAS 密码已通过 PWENCODE 运行)。
对于通用(非 php,命令行)答案,这里是单行的。
curl -v -L -c cookiefile -b cookiefile \
-d "_program=$STP&_username=$USERNAME&_password=$PASSWORD" \
https://yourdomain.com/SASStoredProcess/do
正如这里所讨论的,需要注意的事项包括:
1) 使用 cookie 文件,以便可以通过 SASLogon 重定向写入 (-c) 并随后读取 (-b) 会话令牌。
2) _username 和 _password 参数用于进行身份验证(请参阅文档)
3) -v 用于详细日志记录,-L 用于告诉 curl 遵循重定向 (SASLogon) 位置