2010-08-23 8 views
13

Come posso ottenere l'URL di risposta o id da un progetto di rotaie con httparty in uno script separato dopo aver fatto un post?ruby ​​httparty ottiene risposta url o id dopo il post

script Ruby:

HTTParty.post('http://localhost:3000/change_logs', parameters) 

response.body e tutti gli altri quelli non mostrano l'url e l'id risposta

risposta

-1

questo funziona per me, probabilmente c'è un modo migliore per fare questo però ..

get_change_log_id = HTTParty.post('http://localhost:3000/change_logs.xml', parameters).to_a 

get_change_log_id.each do |r| 
    r.each do |sub| 
    sub2 = sub.to_a 
     sub2.each do |s| 
     if s.index "id" 
      @change_log_id = s.to_s.sub(/[i]/, '').sub(/[d]/, '') 
     end 
     end 
    end 
end 
+0

sì, c'era un modo più semplice: risultati = HTTPa rty.post ('http: // localhost: 3000/change_logs.xml', parametri) change_log_id = results.parsed_response ["change_log"]. values_at ("id") – nictrix

3

Purtroppo, queste informazioni non sono tenuto dalla HTTParty. Quando incontra un reindirizzamento, seguirà il reindirizzamento e restituirà il risultato di tale richiesta. Non salverà nessuna delle informazioni dalla richiesta originale.

La buona notizia è che un comportamento come questo è (solitamente) prevedibile. Le app Web in genere reindirizzano verso le stesse cose dopo una richiesta di post a un URL.

Ma se si vuole davvero farlo, si dovrà usare la libreria net/http fornita con Ruby. Tuttavia, non è molto più difficile di HTTParty, quindi non è molto più lavoro.

+2

grazie per la risposta, che abbia un senso - tuttavia ho fatto trovare un modo per farlo .. è un po 'strano però – nictrix

26

Due anni più tardi, ho trovato un modo per accedere all'ultimo URI dall'attributo request sul response:

url  = "http://example.com/redirects/to/www" 
response = HTTParty.get(url) 
response.request.last_uri.to_s 
# => "http://www.example.com" 
+3

Se vuoi farlo senza ottenere il corpo della destinazione finale. Ad esempio, se desideri semplicemente ottenere l'URL finale, puoi sostituire la chiamata 'HTTPParty.get' con' HTTParty.head (url, {: maintain_method_across_redirects => true}) ' –