Требование состоит в том, чтобы сделать запрос POST на конкретный URL-адрес с заданной полезной нагрузкой JSON. URL-адрес будет отвечать только в том случае, если полезная нагрузка верна, а запрос - через POST.Ошибка POST при отправке данных JSON в Grinder
Это мой код:
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 требует, чтобы второй аргумент был строкой, которая внутренне преобразуется в байт [].
Я действительно не могу понять, что происходит, поэтому любое понимание было бы очень полезно. Спасибо заранее
EDIT: улов Скрипача Запроса 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'),
)
Спасибо за идею. Я делаю то же самое с помощью Fiddler, но не в состоянии понять результат. В Fiddler, когда запрос выполняется через DHC, Fiddler извлекает 2 вещи, то есть туннель к URL-адресу, а затем вызов https функции «getvalues». И во втором вызове https я вижу данные POST. Тем не менее, для запроса на измельчение я вижу один/скрипт/api/validate вызов IP-адреса машины, на которой работает мой шлифовальный станок, и отображается как 200 OK. В необработанном столбце он показывает мне результат, который показывает дробилка в окне журнала. Невозможно увидеть мои данные запроса или даже 403, если на то пошло. –
Другими словами, я могу ясно видеть запрос DHC на веб-сайт. Но я могу видеть только ответ Гриндера. Я думал, что это потому, что я отправлял его через прокси-сервер, но, удалив эту строку, я не смог ничего увидеть, кроме ответа дробилки. –
Итак, по какой-то причине у вас есть яблоки/tangelos по запросу. Тот, что поступает из дробилки, не соответствует требованиям DHC. Рассматриваете ли вы возможность конверсии DHC-запросов на тестовый код шлифовальной машины, чтобы они соответствовали? –