2016-09-16 5 views
0

Требование состоит в том, чтобы сделать запрос 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'), 
    ) 

ответ

0

Проблема заключалась в том, что Grinder не смог получить доступ к порту. Это не имело никакого отношения к JSON. Проблема была связана с URL-адресом, который работает на порту 6443, и Grinder не смог получить доступ к нему (не знаю почему). Я сам изменил свой URL-адрес, чтобы работать на порту 8080 по умолчанию, и мгновенно работал мой скрипт. Спасибо за помощь!

0

Догадке? Вероятно, вам не хватает заголовка с некоторой информацией учетных данных для передачи прокси-сервера/брандмауэра/доступа к приложению. Ваш REST-клиент, DHC, скорее всего, передает эти дополнительные данные, но мясорубка не работает. Возьмите прокси (Fiddler, Charles и т. Д.) И проверьте рукопожатие от DHC до места назначения, а затем сопоставьте это с Grinder. Думаю, вы найдете дельту.

+0

Спасибо за идею. Я делаю то же самое с помощью Fiddler, но не в состоянии понять результат. В Fiddler, когда запрос выполняется через DHC, Fiddler извлекает 2 вещи, то есть туннель к URL-адресу, а затем вызов https функции «getvalues». И во втором вызове https я вижу данные POST. Тем не менее, для запроса на измельчение я вижу один/скрипт/api/validate вызов IP-адреса машины, на которой работает мой шлифовальный станок, и отображается как 200 OK. В необработанном столбце он показывает мне результат, который показывает дробилка в окне журнала. Невозможно увидеть мои данные запроса или даже 403, если на то пошло. –

+0

Другими словами, я могу ясно видеть запрос DHC на веб-сайт. Но я могу видеть только ответ Гриндера. Я думал, что это потому, что я отправлял его через прокси-сервер, но, удалив эту строку, я не смог ничего увидеть, кроме ответа дробилки. –

+0

Итак, по какой-то причине у вас есть яблоки/tangelos по запросу. Тот, что поступает из дробилки, не соответствует требованиям DHC. Рассматриваете ли вы возможность конверсии DHC-запросов на тестовый код шлифовальной машины, чтобы они соответствовали? –