我正在使用将使用Tableau Trusted Ticket身份验证(as described here)的门户网站,但在生成故障单时遇到一些问题。
在继续开发之前,我想验证的一件事是,我将使用的Web服务器已正确列入白名单,以生成受信任的票证请求。
我按照描述运行了white-listing命令,但我的PHP开发人员的代码不断返回-1
,表示失败。
如果所有Tableau都需要生成并返回一个可信的故障单代码是一个HTTP POST,我想我应该能够通过curl测试它。考虑到有多少网络服务器是基于Linux的,我有点意外,不建议将其作为故障排除步骤。
是否有人知道发送测试POST以生成故障单的正确方法,只是为了验证白名单?由于我对curl和Python有一点熟悉,我尝试了那些(使用请求模块的python)没有运气。
卷曲版本:
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的,我还没想办法在我的无头网络服务器上运行它或者捕获它发送的请求进行分析。
答案 0 :(得分:2)
首先,当使用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
请求,因此两者的第一个变体应该有效。我不熟悉画面,所以我不能保证两者都能合作。