要求是对具有给定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'),
)
答案 0 :(得分:0)
最好的猜测?您可能缺少带有一些凭据信息的标头,以将代理/防火墙/访问门传递给应用程序。您的REST客户端DHC可能正在传递此附加数据,但研磨机不是。抓住代理人(Fiddler,Charles等等)并查看从DHC到目的地的握手,然后将其与Grinder匹配。我猜你会发现三角洲。
答案 1 :(得分:0)
问题是Grinder无法访问该端口。它与JSON无关。在端口6443上运行的URL是问题,Grinder无法访问(不知道为什么)。我更改了我的URL本身以在默认端口8080上运行,并立即我的脚本工作。谢谢你的帮助!