2014-07-26 2 views
0

Le code suivant renvoie certaines données de cookie sous forme de chaîne.Comment convertir cette chaîne en hash?

require 'httparty' 

r = HTTParty.get('https://mijn.ing.nl/internetbankieren/SesamLoginServlet') 

r.headers 
# => {"date"=>["Sat, 26 Jul 2014 19:34:09 GMT"], "cache-control"=>["no-cache", "no-store"], "pragma"=>["no-cache"], "expires"=>["Thu, 01 Jan 1970 00:00:00 GMT"], "content-length"=>["13987"], "set-cookie"=>["sessiontype=mpb; Secure", "aac=742A83A50A4C422C24D6F952C4BF6355; Expires=Sun, 26 Jul 2015 19:34:08 GMT; Path=/; Domain=.ing.nl; Secure", "internetbankierenmi=1777182912.20480.0000; path=/", "TSdb640d=de34831032c17e8b66f123633372a9b341a9773368fccca553d402b1d4efbe89959deba9debace3fe0d47c86e27e0b6b1669bf05; Path=/"], "vary"=>["Accept-Encoding,User-Agent"], "content-type"=>["text/html;charset=ISO-8859-1"], "content-language"=>["en"], "connection"=>["close"], "strict-transport-security"=>["max-age=8640000"]} 

response_cookies = r.headers['set-cookie'] 
# => "sessiontype=mpb; Secure, aac=742A83A50A4C422C24D6F952C4BF6355; Expires=Sun, 26 Jul 2015 19:34:08 GMT; Path=/; Domain=.ing.nl; Secure, internetbankierenmi=1777182912.20480.0000; path=/, TSdb640d=de34831032c17e8b66f123633372a9b341a9773368fccca553d402b1d4efbe89959deba9debace3fe0d47c86e27e0b6b1669bf05; Path=/" 

Je veux convertir le response_cookies chaîne à un Hash je peux envoyer avec une requête POST.

Il devrait ressembler à ceci:

{ 
    "sessiontype"=>"mpb", 
    "aac"=>"7430AEE30A4C42200A45ED316AA03490", 
    "Expires"=>"Sun, 26 Jul 2015 19:34:08 GMT", 
    "Path"=>"/", 
    "Domain"=>".ing.nl", 
    "internetbankierenmi"=>"1777182912.20480.0000", 
    "TSdb640d"=>"de34831032c17e8b66f123633372a9b341a9773368fccca553d402b1d4efbe89959deba9debace3fe0d47c86e27e0b6b1669bf05" 
} 

Quelle est la meilleure façon de le faire?

+0

Quand je mets 'headers' égal à votre valeur pour' r.headers', puis 'response_cookies = têtes [ 'SEt- cookie '] ', je trouve que' response_cookies' est un tableau de quatre chaînes, pas une chaîne. S'il vous plaît expliquer ou corriger. Pourquoi la valeur de '" Path "' '"% 2F "'? Pourquoi '" path =/"' (minuscule '" p "') n'est pas reflété dans le résultat désiré? À l'avenir, ne jetez pas simplement un tas de données. Taillez la question à l'essentiel. Au lieu de '' TSdb640d = de ... ''suivi d'un gazillion, vous auriez pu écrire, disons,' 'TSdb = d3" '. Et s'il vous plaît formater de sorte que le défilement horizontal n'est pas nécessaire. –

Répondre

3

Vous pouvez simplement utiliser String#scan et convertir le tableau résultant de hachage:

s.scan(/([^= ]+)=([^=;]+)(?=;|$)/).to_h 
# => {"sessiontype"=>"mpb", "aac"=>"742A83A50A4C422C24D6F952C4BF6355", "Expires"=>"Sun, 26 Jul 2015 19:34:08 GMT", "Path"=>"/", "Domain"=>".ing.nl", "internetbankierenmi"=>"1777182912.20480.0000", "TSdb640d"=>"de34831032c17e8b66f123633372a9b341a9773368fccca553d402b1d4efbe89959deba9debace3fe0d47c86e27e0b6b1669bf05"} 
Questions connexes