Notez que vous pouvez être intéressé à utiliser bibliothèque client de Google pour Ruby au lieu de simplement RESTClient:
https://developers.google.com/api-client-library/ruby/start/installation
Résolution du problème avec RestClient
Vous pouvez extraire le message d'erreur de l'exception HTTP 400.
Voici ce que je vois:
auth_header 'Bearer zzzz...'
base_url = 'https://www.googleapis.com/calendar/v3/calendars/primary'
event = {'summary': 'Test RestClient event', 'start': {'dateTime': Time.now.strftime('%FT%T%z')}, 'end': {'dateTime': (Time.now + 3600).strftime('%FT%T%z')}}
begin
RestClient.post(base_url + '/events', event.to_json, {authorization: auth_header})
rescue RestClient::BadRequest => err
puts err.response.body
end
qui imprime cette HTTP 400 réponse:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "parseError",
"message": "This API does not support parsing form-encoded input."
}
],
"code": 400,
"message": "This API does not support parsing form-encoded input."
}
}
Qu'est-ce qui se passe ici? RestClient suppose que vous voulez une demande Content-Type
de application/x-www-form-urlencoded
sauf indication contraire.
Donc, si l'on ajoute l'en-tête Content-Type: application/json
correct, tout fonctionne comme prévu:
>> RestClient.post(base_url + '/events', event.to_json, {authorization: auth_header, content_type: :json})
=> <RestClient::Response 200 "{\n \"kind\": ...">
Suppression de réponse avant qui ne résout pas le problème
[400: Bad Request] (https://developers.google.com/drive/v3/web/handle-errors#400_bad_request) erreur signifie qu'un champ obligatoire ou un paramètre n'a pas été fourni, que la valeur fournie n'est pas valide ou que la combinaison des champs fournis n'est pas valide. Ce [problème de GitHub] (https://github.com/recurser/pivotal-to-trello/issues/2) a suggéré d'essayer de passer à ssl: 'PivotalTracker :: Client.use_ssl = true'. Cette [publication SO] (http://stackoverflow.com/questions/35176313/rails-restclient-post-request-failing-with-400-bad-request) pourrait également aider. – abielita