#php #curl #tableau-api
#php #curl #tableau-api
Вопрос:
Я пытаюсь понять, как доверенный билет аутентификации предназначен для работы с PHP. Я искал разные вопросы и придумал этот код
$url = 'https://tableau.godigitally.io/trusted/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=" . $userid . ""); // define what you want to post
$response = curl_exec($ch);
curl_close($ch);
//echo 'Test: ' . $response;
echo '<iframe src=', $url, $ticket, 'views/Dashboard2_0/Dashboard1?', $urlparams, '"
width="700" height="400">
</iframe>';
Но я получаю следующую ошибку при запуске этого кода
Я понятия не имею, где я ошибаюсь. Я подтвердил правильность конфигурации моего сервера, используя методы тестирования, описанные в https://help.tableau.com/current/server/en-us/trusted_auth_testing.htm
Ответ №1:
Чтобы наилучшим образом работать с Tableau и веб-интерфейсом, вам следует добавить библиотеку Tableau js в свое веб-приложение и выполнить следующие действия
- Сгенерируйте билет из вызова сервера tableau ,
Чтобы сгенерировать билет с сервера tableau , сначала вы должны добавить своего пользователя на сервер tableau и выполнить следующие действия
это пример кода, который вы можете использовать для создания тикета
function getTabTicket(tableauServer, username, site){
return new Promise((resolve,reject)=>{
let url = new URL(tableauServer '/trusted');
let body = {
username: username,
};
if (site) {
body['target_site'] = site;
}
let postData = querystring.stringify(body);
let proto = http;
if (url.protocol === 'https:') {
proto = https;
}
let req = proto.request({
method: 'POST',
hostname: url.hostname,
port:url.port,
path: '/trusted',
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}, function (response) {
let ticketData = '';
response.on('data', function (chunk) {
ticketData = chunk;
});
response.on('end', function () {
let contents = {ticket: ticketData};
resolve(contents);
});
});
req.on('error', function (error) {
reject(error);
console.log('ERROR: ' error);
});
req.write(postData);
req.end();
})
}
Вы можете проверить эту библиотеку с открытым исходным кодом, которую вы можете использовать для создания билета.
https://github.com/aalteirac/jwt-tableau-broker
После создания билета вы должны вызвать сервер tableau, чтобы получить отчет .
Для этого я использую библиотеку js.
Теперь 2-й шаг — включить js с помощью NPM или по ссылке
и затем вы можете вызвать функцию
переменная tableuReport = new tableau.Viz(this.reportContainerDiv, fullTableauDashboardUrl, Constants.tableauReportUISettings);
reportContainerDiv // элемент div, в котором вы должны отобразить компонент
fullTableauDashboardURL = {tableau_server_url} «доверенный»/{ticektId}/reportsuburl // URL-адрес таблицы в формате
например, ваш, tableau_server_url = «https://tableau-dev-abc.com » tableauDashboardUrl = «#/site/CovidApp/views/IndiaReport/IndiaReport_v2?:iid=1/»
TicketID = «fjdjadheuihrieywfiwnfih»
Таким образом, ваш окончательный URL-адрес будет выглядеть
fullTableauDashboardUrl = «https://tableau-dev-abc.com/trusted/fjdjadheuihrieywfiwnfih/t/CovidApp/views/IndiaReport/IndiaReport_v2?:iid=1
fullTableauDashboardUrl.replace(«#/site», «t»); PS: мы должны заменить #/site на t