Ert*_*ohl 5 php cakephp tableau-api
我发现StackOverflow上没有很多Tableau专家,但也许有人之前有过这个问题,并且知道解决方案.我是Tableau的总菜鸟,所以请原谅我,如果这个问题是无聊的.提前致谢!
系统
我们设置Tableau的方式是在与Web服务器分开的服务器上.应用程序是用PHP编写的,使用CakePHP 2.2.0稳定版.
10.0.0.10 - webserver
10.0.0.11 - tableau
Run Code Online (Sandbox Code Playgroud)
为了让客户端查看Tableau生成的报告,我们使用受信任的身份验证票证系统,在该系统中,客户端将获得具有特定票证的URL.然后,客户端使用此票证直接向tableau服务器询问报告.
一个例子:
问题
问题是:当代码请求表格票号(上面的步骤2和3)时,Tableau服务器将使用身份验证页面而不是票证ID进行响应.如果我在$ postdata数组中注释掉"target_site"参数,则tableau不会使用登录页面进行响应,而只是简单地说"-1".
用于生成可信URL的PHP代码:
<?php
public function get_trusted_url($view = 'book2sheet1') {
$email = $this->Auth->user();
$email = $email['Email']; //This email is registered as a Tableau user!
$postdata = http_build_query(
array(
'username' => $email,
'target_site' => 'oursite', //If I comment this line out, Tableau no longer returns an auth page and instead simply returns "-1"
'client_ip' => $_SERVER['REMOTE_ADDR']
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$ticket = file_get_contents('http://10.0.0.11/trusted/', false, $context);
if($ticket > 0) {
return 'http://tableau.example.com/t/rg/trusted/' . $ticket . '/' .$view . '?:embed=yes&:comments=no&:toolbar=yes';
} else {
echo 'failure'; //debug
print_r($ticket); //debug - this prints out the auth page
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!正如我所提到的,我是Tableau的总菜鸟:)
返回登录html的图像,使用转储到页面 print_r('ticket')

谢谢!
我要做的第一件事就是确保Trusted Ticketing在真空中工作.这个链接http://ttrequest.notlong.com 将让您进入一个文件夹,其中包含一个简单的HTML/JavaScript页面,您可以使用该页面确保正确配置所有内容.然后,仔细查看您的代码.
为target_site提供值(即使是零长度字符串)也是必要的,因为它告诉我们您要为哪个Tableau站点请求票证.空白/零长度字符串="默认网站",基本上.
我知道PHP很少,但Tableau提供了一些我过去使用的示例代码.它不用于file_get_contents()POST,而是倾向于http_parse_message()......它对我有用:
Function get_trusted_ticket_direct($server, $user, $targetsite) {
$remote_addr = $_SERVER['REMOTE+ADDR'];
$params = array(
'username' => $user,
'client_ip' => $remote_addr,
'target_site' => $targetsite
);
$ticket= http_parse_message(http_post_fields("http://$server/trusted", $params))->body;
if ($ticket > 0) {
return $ticket;
}
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
老实说,我不知道file_get_contents()是否被视为比PHP社区中的http_parse_message()更好的方法(也许有人可以对此发表评论),但示例代码是可靠的,除了它仍然没有' t包括对target_site参数的引用(因为它是在Tableau具有多租期之前编写的).
示例代码可以在C:\ Program Files(x86)\ Tableau\Tableau Server\7.0\extras\embedding\php中找到
祝好运!