Hi Leute
Bin froh dieses Forum gefunden zu haben, da ich mir vorstellen könnte, dass ihr mir das ein oder andere mal wenn ich beim programmieren "hängen bleibe" helfen könnt.
Da ich neu hier bin erstmal ein herzliches Hallo an alle.
Nun zu meinem Problem:
Ich probiere derzeit ein wenig mit libcurl herum und habe noch nicht allzu viel Erfahrung, deshalb stehe ich vor einem Problem
Ich möchte ein Programm schreiben, dass auf einer bestimmten Webseite ein Captcha herunterläd, es dem Nutzer anzeigt, seine Eingabe annimmt, diese an die Seite sendet und weitergeleitet wird.
Ich lade also die Seite und speichere den Quelltext in einer Variablen:
dieses Zeige ich an, nehme die Eingabe des Nutzers entgegen, verpacke diese als Post-Command und versuche das an die immer noch offene Verbindung vom Anfang zu senden mit:
Allerdings kommt jedes mal die Meldung, dass es der falsche Captcha Text war.
Nun meine Frage: Habe ich einen Programmierfehler darin? oder einen Denkfehler? Muss ich mit Cookies arbeiten (habe ich versucht)?
Ist das Problem, dass ich zwischendurch eine zweite Verbindung zum Download des Bildes aufbaue? Eigentlich gibt es doch einen Connection Pool der per Grundeinstellung 5 Verbindungen akzeptiert und hält.
Ich weiß ehrlich gesagt nicht weiter.
Ich versteh nicht ganz was du mir sagen willst.
Ich möchte das nunmal jetzt mit libcurl programmieren und hatte gefragt ob jemand meinen Fehler findet.
Kann nicht jemand mit viel Ahnung mal eben drüber schauen? dürfte doch echt keine große Sache sein.
So ich habe mal weiter herumprobiert.
Ich glaube mittlerweile, dass es tatsächlich mit der Session-id zusammenhängt.
Habe in Firefox die Cookies ausgeschaltet und versucht das Captcha einzugeben aber dann kommt auch dass es der falsche Captcha Text war.
Außerdem habe ich mir die Header meiner Requests angesehen.
Egal wie ich mit den Curl-Options Arbeite bekomme ich es nicht hin in den 2 Requests die gleiche Session ID zu senden.
Wenn ich im ersten Schritt die ID mit CURLOPT_COOKIEJAR speichere, sendet mein zweites Request, trotz CURLOPT_COOKIEFILE, keine Session ID an den Server.
Woran könnte das liegen?!
Wenn ich im ersten Schritt die ID mit CURLOPT_COOKIEJAR speichere, sendet mein zweites Request, trotz CURLOPT_COOKIEFILE, keine Session ID an den Server.
Da hast du was falsch verstanden. CURLOPT_COOKIEJAR speichert die Cookies ins angegebene File erst, wenn ein cleanup erfolgt. COOKIEJAR dient eigentlich für die Kommunikation zwischen mehreren Handles.
Standardmässig sind die Cookies in libcurl nicht aktiviert und werden einfach ignoriert. Um die Cookies zu aktivieren, ruft man am besten einmal CURLOPT_COOKIEFILE auf gleich nach dem Initialisieren des Handles. Dann sollten die Cookies empfangen und gelesen werden. Beim nächsten Request sollten automatisch die richtigen Cookies zurückgesendet werden. Ein weiterer Aufruf von CURLOPT_COOKIEFILE ist nicht nötig. Man kann im übrigen auch bei CURLOPT_COOKIEFILE einen Pfad angeben, welcher nicht existiert. Dann werden die Cookies im RAM verwaltet.
Ist leider schon etwas her, seit ich das letzte Mal mit libcurl gearbeitet habe, aber ich hoffe, dass dies bereits weiterhilft. Ansonsten zeig mal einen kurzen Code, wie du die Abfrage mit den Cookies durchgeführt hast.
Probier mal curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
Dann mach dein perform und lad das Captcha runter und mach anschließend ein erneutes perform mit der anderen URL.
Erst wenn du alle Anfragen abgeschlossen hast und dein Programm sich dem Ende nähert und Curl nicht mehr benötigt wird, kannst du das Handle mit cleanup wieder freigeben.
So funktioniert es leider immer noch nicht.
Ich habe mir den Header von Anfrage 3 angesehen und es wir nicht die Session-id von vorher mitgesendet.
Was ist falsch an dem Code?
Warum haben die 2te und 3te Anfrage plötzlich keine Session ID mehr?!
Ich versteh das nicht.
Wie bekomm ich es hin, dass jedesmal dieselbe gesendet wird?!
Oder wird sie gesendet und steht nur nicht bei Set-Cookie weil sie nicht neu gesetzt wird, aber müsste sie dann nicht irgendwo im Header auftauchen?!
Zuletzt bearbeitet von Face am 15:13:13 12.09.2010, insgesamt 1-mal bearbeitet
Was du uns hier präsentierst, sind die Antworten des Servers. Wenn man ihm eine gültige Session-ID zurücksendet, gibt er natürlich nicht mehr die Anweisung, dass der Client ein Cookie setzen soll, denn es wurde bereits gesetzt.
Ich würde langsam mal darauf tippen, dass du wirklich den falschen Captcha Text zurücksendest. Kannst du den Code nicht auf ein kurzes Beispiel reduzieren, so dass wir ihn selber testen können?
Hab dir ne Mail geschickt.
Vielleicht siehst du dir das mal an
ROFL ...
Es geht um eine Warez Seite. Damit erlischt meine Hilfsbereichtschaft in diesem Fall und zwar einfach schon nur rein persönlich. Zudem hatte ich dir gesagt, dass du einen reduzierten Code präsentieren sollst. Einen Code hast du aber nicht mal angefügt.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.