2

JSON オブジェクトを URL groovy に 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');

Unexpected error:400:Bad Request が発生するたびに、 $.ajax() を使用しても同じことが機能します。応答で HTTP:200 OK が返されます。何が問題なのですか?

ありがとうございました。

4

2 に答える 2

2

ajax の例では、4 つの要素を JSON 本体として渡しています。最終的には次のようになります。

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

しかし、グルーヴィーな例では、2 つのクエリ文字列パラメーターのみを渡しています (URI で渡されます)。

おそらく交換する必要があります

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

と:

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

また、多くのサービスがサービス契約を満たしていない理由の説明を提供するため、失敗応答ハンドラーで応答データを出力する必要があります。

于 2013-12-13T20:02:21.720 に答える
0

データを要求しているサーバーにアクセスできる場合は、ログ ファイルを確認する必要があります。

通常、不正なリクエストは、Web サーバーが URL、クエリ文字列、または HTTP ヘッダーを気に入らないことを意味します。サーバーにアクセスできる場合は、詳細を取得できる可能性があります。

それ以外の場合、HTTP ポストを実行する前にリクエスト オブジェクトをログに記録する方法はありますか?

また -- JSON データが適切にフォーマットされていることを再確認してください。一部のフレームワークでは、JSON をリクエスト オブジェクトで送信する前にエスケープする必要があります。それもログに記録して、フレームワークで処理が必要かどうかを確認してください (またはparse、データをディクショナリ/連想配列型構造に変換する必要があるかどうかも確認してください)。

于 2013-12-13T19:42:35.323 に答える