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



需求是使用给定的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。所以我确定有效载荷和连接的链接。我还在另一个脚本中测试了代理,并且工作良好。此外,如果代理不起作用,我也不会得到403。最后,我将其解析为字符串,因为POST要求第二个参数为字符串,它将在内部转换为byte[]。

我真的不明白发生了什么,所以任何见解都会非常有帮助。提前感谢

编辑:提琴手捕获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请求头编辑为so

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

最佳猜测?您可能丢失了一个带有一些凭据信息的标头,以便将代理/防火墙/访问门传递给应用程序。您的REST客户机DHC可能会传递这些额外的数据,但grinder不会。抓一个代理(Fiddler, Charles等),检查从DHC到目的地的握手,然后与Grinder匹配。我猜你会找到的

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

相关内容

  • 没有找到相关文章

最新更新