It is HTTP - a somewhat complex double-request with encryption. I'm working (internally within Tableau) on being able to share this information with the world, such that it wouldn't require reverse-engineering. Stay tuned.
I'd just like to pop my head in and second this request. :)
Right now all of our server interaction is done by having Java make Windows process commands, and I'd love to do this via an API over HTTP instead.
Would love to hear about this too.
I would love to hear more about this. Is there any timeframe for releasing the info?
I currently use xp_cmdshell from the database in order to automate the process. But not all DBA's like to open up for this ;-)
Has anyone had success with reverse engineering (e.g. "scraping") this interaction? Meaning, the functionality of tabcmd (1) login, (2) get, (3) logout.
I too would like to limit my Windows involvment to a) the Tableau Server installation (1) and b) my Tableau Desktop installation (1), and then go back
to my comfortable surroundings in Unix and Linux to script a bunch of stuff using the views I've published to Tableau, and do it from a bunch of other hosts.
Anyone have success scraping this or care to comment?
Andy, does that really work? That shouldn't work - I'm looking at the code right now. It may have at one point in time worked on early Server versions, but we later decided that "security hole" was a better name for that code path than "feature".
It works for the only two versions currently available to me at my company (6.0.5 and an out of date 6.1 beta)
It is not so complex, refer my code below:
http = Curl::Easy.new
http.enable_cookies = true
http.cookiefile = '/tmp/cookies.txt'
http.cookiejar = '/tmp/cookies.jar'
# logon to auth screen
http.url = "SERVER:PORT/auth"
# logon to the system
http.url = "SERVER:PORT/auth/login"
authenticity_token = $1 if http.body_str =~ /name="authenticity_token" type="hidden" value="([^\"]+)/
And bang, you're in If someone interested how to automate complex things with HTTP without tabget, just drop a note here with the use case and we'll see