POST 在 Grinder 中发送 JSON 数据时出错

POST error when sending JSON data in Grinder

要求是向具有给定 JSON 负载的特定 URL 发出 POST 请求。 URL 只有在负载正确且请求通过 POST.

时才会响应

这是我的代码:

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。所以我确定负载和我正在连接的 link。我还在另一个脚本中测试过代理并且工作正常。此外,如果代理不起作用,我也不会得到 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 编辑成这样

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'),
    )

最佳猜测?您可能缺少 header 和一些凭据信息以将 proxy/firewall/access 门传递给应用程序。您的 REST 客户端 DHC 可能正在传递这些额外数据,但 grinder 没有。获取代理(Fiddler、Charles 等...)并检查从 DHC 到目的地的握手,然后将其与 Grinder 匹配。我猜你会找到三角洲。

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