在Grinder

时间:2016-09-16 12:27:08

标签: json jython grinder

要求是对具有给定JSON有效负载的特定URL发出POST请求。只有当有效负载正确并且请求是通过POST时,URL才会响应。

这是我的代码:

request1 = HTTPRequest()
control = HTTPPluginControl.getConnectionDefaults()
httpUtilities = HTTPPluginControl.getHTTPUtilities()
control.setProxyServer("proxy.example.com", 1234)

payload = JSONObject({
  "uaaURL": "https://com-example.something.com",
  "sampleID": "admin",
  "sampleSecret": "password",
  "sampleID2": "example-sample-el",
  "sampleSecret2": "ssenjsoemal/+11=",
  "username": "test",
  "someAttributes": {
    "Groups": [
      "example_com-abc"
    ],
    "attribute": [
      "value1"
    ]
  }
})
payload = str(payload)

url = "https://example-something.com:6443/getvalues"
headers = [
    NVPair('Content-Type', 'application/json'),
    NVPair('Charset', 'UTF-8'),]

class TestRunner:
    def __call__(self):
        result = request1.POST(url, payload, headers)
        print payload, headers

现在问题是我的POST请求给了我403禁止。但是,当我使用相同的有效载荷并使用DHC发送请求时,它给了我200.所以我确定有效载荷和我连接的链接。代理我也在另一个脚本中测试过并且工作正常。此外,如果代理没有工作,我也不会得到403。 最后,我将其解析为字符串,因为POST要求第二个参数为字符串,它将在内部转换为byte []。

我真的无法理解发生了什么,所以任何见解都会非常有用。提前致谢

编辑:Fiddler捕获DHC的请求

POST https://example-something.com:6443/getvalues HTTP/1.1
Host: example-something.com:6444
Connection: keep-alive
Content-Length: 688
Origin: chrome-extension://aejoelaoggembcahagimdiliamlcdmfm
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8

{
                "uaaURL": "https://com-example.something.com",
                "sampleID": "admin",
                "sampleSecret": "password",
                "sampleID2": "example-sample-el",
                "sampleSecret2": "ssenjsoemal/+11=",
                "username": "test",
                "someAttributes": {
                                "Groups": [
                                  "example_com-abc"
                                ],
                                "attribute": [
                                  "value1"
                                ]
                }
}

我甚至编辑了我的Grinder请求标题

headers = (
    NVPair('Content-Type', 'application/json'),
    NVPair('Charset','UTF-8'),
    NVPair('Accept', '*/*'),
    NVPair('Accept-Encoding', 'gzip, deflate, br'),
    NVPair('Accept-Language', 'en-US,en;q=0.8'),
    NVPair('Connection', 'keep-alive'),
    )

2 个答案:

答案 0 :(得分:0)

最好的猜测?您可能缺少带有一些凭据信息的标头,以将代理/防火墙/访问门传递给应用程序。您的REST客户端DHC可能正在传递此附加数据,但研磨机不是。抓住代理人(Fiddler,Charles等等)并查看从DHC到目的地的握手,然后将其与Grinder匹配。我猜你会发现三角洲。

答案 1 :(得分:0)

问题是Grinder无法访问该端口。它与JSON无关。在端口6443上运行的URL是问题,Grinder无法访问(不知道为什么)。我更改了我的URL本身以在默认端口8080上运行,并立即我的脚本工作。谢谢你的帮助!