【问题标题】:Generating Tableau Trusted Tickets with curl or Python?使用 curl 或 Python 生成 Tableau 可信票证?
【发布时间】:2013-05-17 07:21:41
【问题描述】:

我正在开发一个将使用 Tableau 可信票证身份验证 (as described here) 的门户网站,但在生成票证时遇到了一些问题。

在继续开发之前,我想验证的一件事是,我将使用的 Web 服务器已正确列入白名单以生成 Trusted Ticket 请求。

我已经按照说明运行了白名单命令,但是我的 PHP 开发人员的代码一直返回 -1,表示失败。

如果 Tableau 需要生成和返回可信票证代码的所有内容都是 HTTP POST,我想我应该能够通过 curl 对其进行测试。考虑到有多少 Web 服务器是基于 Linux 的,因此不建议将其作为故障排除步骤,我有点惊讶。

有谁知道发送测试 POST 以生成票证的正确方法,只是为了验证白名单?由于我对 curl 和 Python 不太熟悉,因此我尝试了这些(python 使用 requests 模块),但没有成功。

卷曲版本:

curl --data "username=exampleuser" http://webserver.example.com/trusted

Python 版本:

import requests
url = "http://webserver.example.com/trusted"
postdata = "username=exampleuser"
r = requests.post(url, postdata)
print r.text

这两个都返回-1,这可能只是白名单以某种方式失败,或者可能是这些请求格式不正确。有没有人尝试过类似的事情并取得了成功?

相反,有没有人知道正确的POST 请求应该是什么样子的明文字符串?

有一个有用的 HTML 和 JavaScript over here 块,我已经能够成功地生成票证,但由于它是基于 JavaScript 的,我还没有找到一种方法来在我的无头网络服务器上运行它或捕获请求它发送分析。

【问题讨论】:

    标签: python curl python-requests tableau-api


    【解决方案1】:

    首先,当使用 curl 处理动词时,你必须使用-X VERBNAME,例如,

    ~# curl -X POST http://httpbin.org/post
    {
      "url": "http://httpbin.org/post",
      "data": "",
      "json": null,
      "args": {},
      "form": {},
      "origin": "127.0.0.1",
      "headers": {
        "User-Agent": "curl/7.19.6 (x86_64-unknown-linux-gnu) libcurl/7.19.6 OpenSSL/0.9.8n zlib/1.2.3 libidn/1.5",
        "Connection": "close",
        "Accept": "*/*",
        "Content-Length": "0",
        "Host": "httpbin.org"
      },
      "files": {}
    }
    

    其次,提到参数,我会尝试这些变化:

    import requests
    
    # Variation 1
    r = requests.post(url, data={'username': 'exampleuser'})
    
    # Variation 2
    r = requests.post(url, params={'username': 'exampleuser'})
    
    # Followed by these lines
    print r.status_code
    print r.text
    

    cURL 中的等价物应如下所示:

    # Variation 1 equivalent
    curl --data='username=exampleuser' -X POST http://httpbin.org/post
    
    # Variation 2 equivalent
    curl -X POST http://httpbin.org/post?username=exampleuser
    

    我从第二行猜测这应该是一个application/x-www-form-urlencoded POST 请求,因此两者的第一个变体都应该起作用。不过,我对画面一点也不熟悉,所以我不能保证两者都能奏效。

    【讨论】:

    • 尤里卡!非常感谢您的帮助。 Python 代码变体 #1 和 #2 都可以工作;显然我正试图用参数为它做请求的工作。
    • 使用来自不同主机的信息,我能够确认确实存在白名单问题,并且能够纠正它。一旦我这样做了,我就能够验证我的初始 curl 命令实际上应该有效 - 我只是没有从正确清除的主机上尝试过它。现在可以了。显然 --data 选项意味着 POST,所以我不需要显式添加“-X POST”。
    • @Dave TIL。我总是将 curl 与显式动词一起使用。然后我也使用 PUT、DELETE 和其他带有数据的动词,所以我通常需要这样做。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多