2017-04-12 1 views
1

Dans le script ci-dessous j'accède à un site Web qui fait beaucoup de redirections et j'ai besoin de connaître l'URL/le port de la dernière redirection.Comment analyser les cookies dans HTTPClient?

cookie_file = Tempfile.new('cookie_jar.txt') 
client.set_cookie_store(cookie_file) 
client.set_auth(nil, user, pass) 
client.ssl_config.verify_mode = nil 

r = client.get(uri, :follow_redirect => true) 
r = client.get_content(uri, :follow_redirect => true) 

pp client.cookie_manager.jar 

En regardant les biscuits que je peux voir à partir du deuxième biscuit que ce temps est était https://example.com:65003. Si j'essaye encore, ce sera un port différent.

Question

Comment puis-je analyser un cookie HTTPClient?

[#<HTTP::Cookie:name="ASPSESSIONIDQGDSCTSA", 
value="DBEHBGICIKNNIBBMNAMGIMFG", domain="example.com", 
for_domain=false, path="/", secure=true, httponly=false, expires=nil, 
max_age=nil, created_at=2017-04-12 20:09:58 +0200, 
accessed_at=2017-04-12 20:09:58 +0200 
origin=https://example.com/bwtem/?follow_redirect=true>, 

#<HTTP::Cookie:name="ASPSESSIONIDSGAQARRD", 
value="APJDHADDOHENHCCHOLLMAHNJ", domain="example.com", 
for_domain=false, path="/", secure=true, httponly=false, expires=nil, 
max_age=nil, created_at=2017-04-12 20:09:57 +0200, 
accessed_at=2017-04-12 20:09:58 +0200 
origin=https://example.com:9000/auth/?id=7C05C91D24C4A798230A29FD28C587F3&target=https://example.com:65003&>] 
+0

Les cookies sont généralement salés/crypté/signé donc à moins que vous avez le secret, vous ne serez pas en mesure de le déchiffrer. – Anthony

+0

C'est la valeur de 'target' que je cherche qui est le texte brut. Donc, la question est de savoir comment y accéder. –

+0

Vous voulez dire que vous voulez obtenir le paramètre de requête 'target' de la valeur de' origin'? – Anthony

Répondre

1

Vous pouvez le faire avec le module URI:

origin 
=> "https://example.com:9000/auth/?id=7C05C91D24C4A798230A29FD28C587F3&target=https://example.com:65003&" 
URI.decode_www_form(URI.parse(origin).query).to_h["target"] 
=> "https://example.com:65003"