Formular ausfüllen, absenden und Ergebnis einlesen
LutzWinkler
- php
Auf der Seite qthrombosis.org gibt es einen Risikokalkulator, der aus bestimmten Parametern das Thromboserisiko einer Person berechnet.
Ich habe zu Testzwecken eine vereinfachte deutsche Version dieser Seite erstellt. In einem Formular werden lediglich die Parameter Alter, Raucherstatus, Größe und Gewicht abgefragt und an qthrombosis.org weitergeleitet.
Jetzt würde ich gerne das Ergebnis 'abfangen' und ebenfalls mit deutschem Text darstellen.
Ich nehme an, dass ich dazu ein PHP-Skript brauche. Bei meinen Recherchen bin ich auf cURL gestossen und habe folgendes TestSkript ausprobiert:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, '&age=30&smoke_cat=4&weight=55&height=168');
$output = curl_exec($ch);
curl_close($ch);
echo $output;
Diese Skript liefert mir allerdings nur das leere Formular von qthombosis.org. Die übergebenen Werte werden nicht übernommen.
Ich habe das Ganze dann auch noch mit fsockopen probiert - ebenfalls ohne Erfolg.
Wo liegt mein Denkfehler?
Gruß, Lutz
Hallo,
Jetzt würde ich gerne das Ergebnis 'abfangen' und ebenfalls mit deutschem Text darstellen.
Ich nehme an, dass ich dazu ein PHP-Skript brauche.
es muss nicht PHP sein, und trivial ist es sicher auch nicht, aus dem HTML-Dokument, das du als Antwort bekommst, nur die gewünschten Informationen rauszupopeln. Eine Fleißarbeit. ;-)
Bei meinen Recherchen bin ich auf cURL gestossen und habe folgendes TestSkript ausprobiert:
$ch = curl_init();
[...]
curl_close($ch);
echo $output;
> Diese Skript liefert mir allerdings nur das leere Formular von [qthombosis.org](http://qthrombosis.org). Die übergebenen Werte werden nicht übernommen.
Erst habe ich vermutet, die Originalseite setzt möglicherweise ein Cookie, das sie beim Formularversand unbedingt wieder sehen möchte - aber ein Blick mit der LiveHTTP-Extension in Firefox zeigt nichts derartiges. Denkbar ist auch, dass der HTTP-Referer abgefragt wird.
Am wahrscheinlichsten ist aber IMO, dass das name/value-Pärchen des submit-Buttons abgefragt wird. Du hast zwar die Feldnamen schön beibehalten, hast aber einen "falschen" value im submit-Button stehen. Was ist, wenn du da die Original-Beschriftung (also value) stehenlässt?
So long,
Martin
--
Eine Neandertaler-Sippe sitzt in ihrer kalten Höhle. Seufzt der Stammesälteste: "Hoffentlich erfindet bald jemand das Feuer!"
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
Hallo Martin,
also mein deutsches Testformular funktioniert ja. Es übergibt brav die eingegebenen Werte an qthrombosis.org.
Was ich nicht hinkriege ist, den ganzen Vorgang per PHP-Skript mit cURL anzustossen, ohne dass die Originalseite angezeigt wird.
Nachtrag:
Die url in dem PHP-Skript fehlt:~~~php
$url='http://qthrombosis.org/index.php'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
...
curl_close($ch);
echo $output;
Gruß, Lutz
Hi,
also mein deutsches Testformular funktioniert ja. Es übergibt brav die eingegebenen Werte an qthrombosis.org.
ach so, dann hatte ich das missverstanden.
Was ich nicht hinkriege ist, den ganzen Vorgang per PHP-Skript mit cURL anzustossen, ohne dass die Originalseite angezeigt wird.
Da hilft nur eins: Alles zurück auf Anfang.
Vergleiche Stück für Stück den ausgehenden HTTP-Request deines umgebauten Formulars (dazu leistet die schon erwähnte LiveHTTP-Extension für Firefox gute Dienste) mit dem "selbstgemachten" curl-Request. Die müssen sich ja in irgendeinem signifikanten Detail unterscheiden, wenn unterschiedliche Antworten zurückkommen. Wenn's die Header nicht sind, dann eventuell die POST-Daten selbst - wobei es mir seltsam vorkommt, dass du die POST-Daten mit einem '&' beginnst. Ob das aber schon des Lösels Rätsung ist, kann ich nicht sagen. Ich vermute eher nicht.
Die url in dem PHP-Skript fehlt: $url='http://qthrombosis.org/index.php'
Oder auch nur 'http://qthrombosis.org/', das sollte äquivalent sein.
So long,
Martin
Hallo Martin,
das '&' in den POST-Daten macht keinen Unterschied.
Ich besorge mir jetzt mal die LiveHTTP-Extension für Firefox.
Gruß, Lutz