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 本身更改为 运行,我的脚本立即运行。感谢您的帮助!
要求是向具有给定 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 本身更改为 运行,我的脚本立即运行。感谢您的帮助!