2013-12-13 4 views
2

Я использую этот код для постинга JSON objeect к URL заводной:непредвиденная ошибка 400: Bad Request HttpBuilder POST запрос

def http = new HTTPBuilder('myURL') 

// perform a POST request, expecting JSON response data 
http.request(POST, JSON) { 
uri.path = myPath 
uri.query = [ service_key:'1.0', event_type: 'trigger' ] 
headers.'Content-Type' = 'application/json' 

// response handler for a success response code: 
response.success = { resp, json -> 
println resp.status 

// parse the JSON response object: 
json.responseData.results.each { 
ret = json.getText() 
println 'Response data: -----' 
println ret 
println '--------------------' 
} 
} 

// handler for any failure status code: 
response.failure = { resp -> 
println "Unexpected error: ${resp.status} : ${resp.statusLine.reasonPhrase}" 
} 
} 

    Ajax Code that works:(EDITED) 
$.ajax({  url:'https://events.pagerduty.com/generic/2010-04-15/create_event.json',                  
      type: 'POST', 
     contentType: 'application/json', 
     data: JSON.stringify({ 

       service_key: "1379ca7018e94343bf5fa5add9fa42eb", 
       incident_key: "srv01/HTTP", 
       event_type: "trigger", 
       description: "TEst Test" 
    }), 
    dataType:'json' 
    }); 
    alert('Message Sent'); 

Everytime я получаю Непредвиденная ошибка: 400: Bad Request, То же самое, если я это делаю с $ .ajax() он работает. Я получаю HTTP: 200 OK в ответе. Что здесь происходит?

Thank you.

+0

400 Плохой запрос - это ответ от Сервера. Не зная, какую услугу вы на самом деле вызываете, трудно понять, что не так ... Можете ли вы добавить код $ .ajax(), который работает ... –

+0

Отредактировано мое сообщение, чтобы добавить данные ajax – monal86

+0

Нужно ли вам строгать ваши данные в этом line 'http.request (POST, JSON)' или это уже подходящий формат? – Kasapo

ответ

2

В АЯКС примере вы передаете 4 элемента, как тело JSON, который будет в конечном итоге, как это:

{"service_key": "1379ca7018e94343bf5fa5add9fa42eb", 
"incident_key": "srv01/HTTP", 
"event_type": "trigger", 
"description": "TEst Test"} 

Но в заводной примере вы только мимо двух строки запроса Params (которые будут переданы на ури).

Вы, вероятно, следует заменить

uri.query = [ service_key:'1.0', event_type: 'trigger' ] 

с:

body = [service_key:'1.0', incident_key: "srv01/HTTP", event_type: 'trigger' description: "TEst Test"] 

Вы должны также выводить данные отклика в обработчиках реагирования отказа, как много услуг, которые дадут вам описание того, почему вы не отвечают договор на обслуживание.

+0

Ввод тела вместо uri.query дал мне HTTP: 200 .. Спасибо – monal86

0

Если у вас есть доступ к серверу, на который вы запрашиваете данные, вы должны посмотреть файлы журнала.

Плохой запрос обычно означает, что веб-сервер не нравится ваш URL-адрес, строку запроса или ваши HTTP-заголовки. Если вы можете попасть на сервер, вы можете получить более подробную информацию.

В противном случае существует ли способ зарегистрировать свой объект запроса перед выполнением HTTP-сообщения?

Также - дважды проверьте правильность форматирования данных JSON. В некоторых рамках мне нужно избежать моего JSON перед отправкой его в объект запроса. Попробуйте также выполнить регистрацию и посмотреть, требует ли ваша инфраструктура обрабатывать (или, может быть, даже parse данные в структуре типа словаря/ассоциативного массива).