[C++] Hilfe bei Curl

Hothe

Grünschnabel
Ich brauche Hilfe bei dem Session/Cookie Handling von Curl (bzw. libcurl), hat irgendjemand eine Idee wie man mit Curl sich in Foren einloggt und Cookies benutzt, Sessions benutzt etc. ... ?

Ich hab auch schon den ein oder anderen Code geschrieben, ich bin aber bisher nicht über den Login herausgekommen.

Code:
    CURL* curl = curl_easy_init();    
 if(curl)         {         
//url einlesen      
 curl_easy_setopt(curl,CURLOPT_URL,"http://www.**.**/**?do=login");   
// callback einrichten (ist im Moment aber weniger wichtig)
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle_data);         
// Post Daten einlesen
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "*die Daten die ich übertrage*");         
//cookies aktivieren
curl_easy_setopt(curl,CURLOPT_COOKIEJAR, "blub");             
// ausführen  
CURLcode res = curl_easy_perform(curl);        
        curl_easy_setopt(curl,CURLOPT_URL,"seite die geschützt ist" );      
        curl_easy_setopt(curl,CURLOPT_AUTOREFERER,1);
        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle_data);
        curl_easy_setopt(curl,CURLOPT_COOKIEJAR, "test");
        res = curl_easy_perform(curl);
 curl_easy_cleanup(curl);
}

Nun kommt aber immer wenn ich eine Seite aufrufen will, bei der man eingeloggt sein muss:

Ihr Seitenaufruf konnte nicht verarbeitet werden, da Sie sich angemeldet haben, nachdem die vorherige Seite geladen wurde.

Irgendjemand Lösungsvorschläge?
 
Hallo,

so direkt weiß ich leider auch nicht wie CURL das mit den Cookies intern regelt bzw ob diese intern gepuffert werden um sie bei einem erneuten HTTP request automatisch mitzuschicken. Wenn du allerdings das Cookie von der Seite in dein CURL_COOKIEJAR flushst und das Cookie danach wieder explizit via CURLOPT_COOKIEFILE lädst, müsste es eigtl. funktionieren. Hast du denn mal ein wenig Analyse betrieben (bspw. mit wireshark) was passiert wenn du die Anmeldeprozedur manuell und mit curl durchführst?

Zur Thematik mit dem FLUSH:

C:
#define URL "http://www.tutorials.de/forum/"
#define LOGIN_SUBURL "login.php?do=login"
#define COOKIE_FILE "tutorials.de.jar"
#define POST_DATA "vb_login_username=XXX&cookieuser=1" \
  "&vb_login_password=" \
  "&s=&securitytoken=3051246bed61558da4d9c932bff4262b5cde0f62" \
  "&do=login&vb_login_md5password=XXX" \
  "&vb_login_md5password_utf=XXX"

  /* erst der Login Versuch: */
  curl_easy_setopt(curlh, CURLOPT_URL, URL LOGIN_SUBURL);
  curl_easy_setopt(curlh, CURLOPT_POSTFIELDS, POST_DATA);
  curl_easy_setopt(curlh, CURLOPT_WRITEFUNCTION, NULL);
  curl_easy_setopt(curlh, CURLOPT_COOKIEJAR, COOKIE_FILE);
  curl_easy_setopt(curlh, CURLOPT_COOKIELIST, "FLUSH");
  curl_easy_perform(curlh);

  /* dann nochmaliges verbinden */
  curl_easy_setopt(curlh, CURLOPT_URL, URL);
  /* hier das Cookie-File laden */
  curl_easy_setopt(curlh, CURLOPT_COOKIEFILE, COOKIE_FILE);
  curl_easy_setopt(curlh, CURLOPT_WRITEFUNCTION, data_handler);
  curl_easy_perform(curlh);

HTH,
RedWing
 
Zuletzt bearbeitet:
Zurück