2010-10-03 13 views
10

Comment puis-je définir le corps de la requête d'une requête CURB comme étant ma chaîne json? J'essaie de faire une requête JSON POST en utilisant Curb.Ruby: Comment envoyer une requête JSON POST avec Curb?

Mon code:

require 'rubygems' 
require 'curb' 
require 'json' 

myarray = {} 
myarray['key'] = 'value' 
json_string = myarray.to_json() 

c = Curl::Easy.http_post("https://example.com" 

     # how do I set json_string to be the request body? 

    ) do |curl| 
     curl.headers['Accept'] = 'application/json' 
     curl.headers['Content-Type'] = 'application/json' 
     curl.headers['Api-Version'] = '2.2' 
    end 

Répondre

39

La bonne façon de le faire est d'ajouter simplement le contenu après l'URL:

c = Curl::Easy.http_post("https://example.com", json_string_goes_here 
    ) do |curl| 
     curl.headers['Accept'] = 'application/json' 
     curl.headers['Content-Type'] = 'application/json' 
     curl.headers['Api-Version'] = '2.2' 
    end 

Cela va régler le json_string d'être le corps de la demande.

+0

Parfait, m'a sauvé aussi. – zachaysan

+5

Nice. Quelque chose comme ceci devrait être inclus dans la documentation de Curb. –

+2

J'ai juste éprouvé un peu de chagrin avec certaines des données que j'essayais de mettre dans 'json_string_goes_here'. L'utilisation de la bibliothèque ruby ​​json si vous appliquez 'JSON.pretty_generate (object)' cela peut résoudre certains problèmes avec des caractères non échappés. – hamitron