Как я могу вызвать хранимый процесс SAS из CURL в PHP?
Я хочу создать веб-приложение, которое вызывает хранимый процесс SAS и печатает результаты. Я хочу, чтобы аутентификация выполнялась за кулисами.
Веб-приложение построено на PHP, и я буду использовать CURL для выполнения запроса.
Это возможно? Какие варианты CURL необходимы?
3 ответа
Используя их API тикетов, вы можете сначала выполнять запросы CURL с PHP, чтобы в конечном итоге получить результаты конечной точки STP.
Step1a) POST-запрос.../SASLogon/v1/tickets с закодированной в форме полезной нагрузкой имени пользователя и пароля. Step1b) Посмотрите на заголовок ответа "Местоположение" (разделенный на "/"[-1]), чтобы получить свой токен авторизации.
Шаг 2а) Сделайте POST-запрос к тому же первому URL-адресу с добавленным в конце токеном авторизации и передайте в теле (в кодированной форме) URL-адрес службы (service=xxx) (в идеале это.../SASStoredProcess/do) конечная точка. Step2b) разобрать тело ответа для вашего жетона билета.
Шаг 3a) Запустите запрос к службе (.../do? Token=[TicketToken]) с полезной нагрузкой POST (закодированная форма) _program = STP конечная точка Step3b) Результаты будут результатом вашего запроса.
Это, вероятно, требует определенных настроек установки SAS, но это обычное рукопожатие (обычно - из памяти, а не с примером передо мной). SAS очень специфичен в зависимости от версии и используемой установки.
Вы можете добиться этого с помощью CURL, но, по моему личному мнению, мне нравится использовать библиотеки запросов более высокого уровня.
First ensure your stored process web server is configured correctly by following the instructions located here.
Create a.php file containing the below code.
<?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);
?>
Configure the following:
- _username
- _password
- _program (for this example I've used a sample that comes with SAS)
- CURLOPT_URL
- CURLOPT_PORT
- в зависимости от архитектуры вашего сайта, вам могут потребоваться дополнительные параметры CURL, но для большинства случаев этого может быть достаточно
После того, как вы настроили его, введите URL-адрес.php-файла в адресную строку вашего браузера. Вы должны увидеть результат:
Hello World!
В указанном коде PHP используется минимальное количество параметров, необходимых для работы. Предполагается, что в какой-то момент вы также можете проанализировать данные заголовка, чтобы определить тип содержимого результата.
Кроме того, при реализации приведенного выше кода, убедитесь, что любые учетные данные пользователя хранятся надежно. Никогда не стоит жестко кодировать учетные данные пользователя в исходный код (даже если пароль SAS был запущен через PWENCODE).
Для общего (не php, командной строки) ответа, здесь одна строка.
curl -v -L -c cookiefile -b cookiefile \
-d "_program=$STP&_username=$USERNAME&_password=$PASSWORD" \
https://yourdomain.com/SASStoredProcess/do
Как обсуждено здесь, вещи, чтобы отметить, включают:
1) Cookiefile используется для того, чтобы маркер сеанса мог быть записан (-c) и впоследствии прочитан (-b) перенаправлением SASLogon.
2) Параметры _username и _password используются для аутентификации (см. Документы)
3) -v для подробного ведения журнала, -L, чтобы указать curl следовать местоположению перенаправления (SASLogon)