Некоторое время искали безуспешно, чтобы найти решение.Кроме того, я действительно не экспериментировал с php и REST API, поэтому извиняюсь за любые ошибки новичка.
Мне нужно 1) отправить POST-запрос на сервер и получить файлы cookie, связанные с моим логином 2) повторно использовать этикуки с URL на том же сервере, который запускает отчет.
Для этого я использую php и cURL.Следующий скрипт работает нормально:
<?php
$homeurl = "http://localhost:8080/pentaho/j_spring_security_check?j_username=admin&j_password=admin&locale=en_US";
$reporturl = 'http://localhost:8080/pentaho/api/repos/:public:IframeDossier:IframeTest.prpt/viewer?label=fin';
$cookie_jar = tempnam('/Users/pierre/Vrac','cookie');
if (!file_exists(realpath($cookie_jar))) touch($cookie_jar);
//login and get cookies
$ch = curl_init($homeurl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$return = curl_exec($ch);
// run report url using cookies
echo "execution report";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch, CURLOPT_URL, $reporturl);
$page = curl_exec($ch);
echo $page;
curl_close($ch);
?>
Я получаю ожидаемое возвращение:
" HTTP / 1.1 100 HTTP / 1.1 415 Set-Cookie: session-expiry = 1542901561740; Путь= / Set-Cookie: server-time = 1542894361740; Path = / Content-Length: 0 Дата: четверг, 22 ноября 2018 13:46:01 GMT Соединение: закрыть"
сейчас вместо этого я бынравится вставлять $ reporturl в Iframe.Я построил следующий Iframe:
<iframe id="inlineFrameExample"
title="Inline Frame Example"
width="1000"
height="2000" src="http://localhost:8080/pentaho/api/repos/:public:IframeDossier:IframeTest.prpt/viewer?label=fin">
</iframe>
Мой Iframe работает правильно, когда я вызываю его URL.
Я сейчас вызываю URL Iframe в своем коде.поэтому
curl_setopt($ch, CURLOPT_URL, $reporturl);
становится
curl_setopt($ch, CURLOPT_URL, http://localhost:8080/IframeTest.html);
проблема заключается в том, что теперь мой браузер запрашивает аутентификацию, в то время как мой Iframe должен уже иметь эту аутентификацию с использованием файлов cookie, полученных на первом шаге кода,Я, должно быть, делаю что-то не так, но не могу понять, что ... любая помощь очень ценится.
спасибо