Seite 1 von 1
php curl mit session cookie
Verfasst: 27.03.2009, 13:32
von seomedius
Hallo,
ich habe ein kleines Problem mit php curl und einem Session Cookie.
Ich führe 2 curl Aktionen aus, in der ersten hole ich mir die sessionid und einen sessioncookie der bis zum ende der Session gültig ist. In der zweiten Aktion verwende ich die zuvor ausgelesene sessionid und den sessioncookie.
Die beiden Aktionen werden von ein und derselben curl_init() initialisiert, sodass es nur eine Session gibt.
Nun zum eigentlichen Problem. Der Cookiefile wird erst nach dem beenden der Session angelegt, was zur Folge hat das die zweite Aktion keine aktuellen Werte übergeben bekommt und der Aufruf fehlschlägt.
Kennt jemand von euch eine Möglichkeit den Cookie vor beenden der Curlsession anzulegen?
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 27.03.2009, 13:59
von MrTunes
Also ich kenn das curl php binding nicht.
Aber vielleicht hilft dir ja mein c code weiter:
Code: Alles auswählen
CURLSH * share_handle = curl_share_init();
curl_share_setopt(share_handle, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt(share_handle, CURLSHOPT_USERDATA, &share_mutex);
curl_share_setopt(share_handle, CURLSHOPT_LOCKFUNC, lock);
curl_share_setopt(share_handle, CURLSHOPT_UNLOCKFUNC, unlock);
CURL *eh1 = curl_easy_init();
CURL *eh2 = curl_easy_init();
curl_easy_setopt(eh1, CURLOPT_SHARE, share_handle);
curl_easy_setopt(eh2, CURLOPT_SHARE, share_handle);
CURLSHOPT_SHARE
The parameter specifies a type of data that should be shared. This may be set to one of the values described below.
CURL_LOCK_DATA_COOKIE
Cookie data will be shared across the easy handles using this shared object.
Verfasst: 27.03.2009, 14:04
von net(t)worker
warum nicht einfach die php webclientclass snoopy verwenden? derVorteil ist das die zur not auch ohne curl funktioniert, also das script später wesentlich einfacher auf einen anderen webspace übertragen werden kann... aber wenn, dann die nehmen die bei Wordpress dabei ist, da diese besser gepflegt wird als die bei sourceforge... die bei sourceforge enthält Fehler die bei der in Wordpress beseitigt wurden...
Verfasst: 28.03.2009, 08:38
von CIX88
Im Prinzip bei CURL erst die Informationen vom Cookie ermitteln, dann praktisch die Seite mit diesen Informationen erneut aufrufen:
generell bei CURL:
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
und wenn der Cookie-Inhalt bekannt ist:
if ( $cookie_inhalt ) { curl_setopt ( $ch, CURLOPT_COOKIE, $cookie_inhalt ); }
Verfasst: 28.03.2009, 17:25
von seomedius
Danke für eure Vorschläge! Snoopy kann zwar mit Sessions und Cookies umgehen war für diesen speziellen Fall aber nicht geeignet. Der Vorschlag von Mr. Tunes einen multi handle zu starten ist für Probleme dieser Art sicherlich sinnvoll.
Ich habe das Problem jetzt mit einer dritten Abfrage in der die zweite benötigte Sessionid übergeben wird gelöst. Die id lese ich aus der Header Antwort mit Hilfe von CURLOPT_HEADER,TRUE aus.
Ich möchte noch bemerken das in diesem Fall zusätzlich mit einem im Hintergrund agierenden Javascript gearbeitet wird und das der Server sehr "streng" ist was den Request und die übergeben Parameter angeht, normalerweise lässt sich sowas mit weniger Aufwand bewältigen.