2016-08-08 62 views
0

Ich führe ein Skript aus, das mehrere GET-Anforderungen an eine API mit dem RestClient-Juwel ausführen muss.Session/Cookies in aufeinanderfolgenden Abrufanforderungen persistieren

Allerdings benötigt diese API Cookies & Sitzung dauerhaft gespeichert werden, um ordnungsgemäß zu funktionieren.

Ich habe dies:

# first request 
url = "http://example-api.com/first-endpoint?param1=foo&param2=bar 
request = RestClient.get url, :content_type => :json, :accept => :json 
cookies = request.cookies 

# second request 
url = "http://example-api.com/second-endpoint?param1=foo&param2=bar 
request = RestClient.get url, :content_type => :json, :accept => :json 

Um die zweite Anfrage Arbeit zu machen, muss ich die gleiche Sitzung und Cookies halten.

RestClient.post post_url, {}, {:cookies => cookies} 

Aber ich konnte nicht in ihrer Dokumentation & auf Stackoverflow irgendeine Weise zu tun dies für eine GET-Anfrage finden: Mit RestClient, kann ich die Cookies in einer POST-Anforderung wie dieses zurücksenden.

Wie soll ich fortfahren, um die Cookies zwischen zwei aufeinanderfolgenden GET-Anfragen am Leben zu erhalten? Ich bin auch offen für die Verwendung eines anderen Edelsteins oder Technik, wenn RestClient dies nicht unterstützt.

Jede Hilfe wird sehr geschätzt!

Antwort

0

Ich versuchte dies:

RestClient.get url,{:cookies => cookies} 

Und es scheint gut zu funktionieren!

1

Beachten Sie, dass Sie in den letzten Versionen von rest-client (> = 2.0.0) ein aktuelles Cookie-Jar (HTTP::CookieJar) verwenden können, das sich in der folgenden Ablaufzeit mehr wie ein Browser verhält/Domain/Pfad Einschränkungen.

resp = RestClient.get(url) 
jar = resp.cookie_jar 

resp2 = RestClient::Request.execute(url: someurl, method: :get, cookies: jar)