Rückgabe von HTML body

Hallo Zusammen,

da meine Personenwaage derzeit mehr schätzt als misst, habe ich mich mal auf dem Markt umgesehen, was es denn so an modernen Geräten gibt. Ich habe eine gefunden die mit Fddb.info zusammenarbeiten und möchte daher gerne die Daten aus Fddb.info übernehmen.

In VBS funktioniert das tadellos:


strUsername="username"
strPassword="password"

Set objHttp = WScript.CreateObject("WinHttp.WinHttpRequest.5.1")
objHttp.Open "POST", "http://fddb.info/db/i18n/account/?lang=de&action=login"
objHTTP.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
objHttp.Send "loginemailorusername="&strUsername&"&loginpassword="&strPassword&"&returnurl=http://fddb.info/db/i18n/exporter/?lang=de&action=userhistory&q=csv"
WScript.Echo objHttp.ResponseText

Das Ergebnis ist dann:
datum_tag_monat_jahr;gewicht_kg;koerperfett_prozent;wassergehalt_prozent;taillenumfang_cm;hueftumfang_cm;
„27.12.2012“;„85,20“;"";"";"";"";
„30.11.2012“;„84,60“;"";"";"";"";
„29.11.2012“;„84,70“;"";"";"";"";
„27.11.2012“;„86,00“;"";"";"";"";

Damit könnte ich ja etwas anfangen. Nun habe ich mal versucht das in php zu realisieren. Dabei ist folgendes herausgekommen:


<?
$strUsername="username";
$strPassword="password";


$ch = curl_init("http://fddb.info/db/i18n/account/?lang=de&action=login");
 curl_setopt($ch, CURLOPT_POSTFIELDS, "loginemailorusername=".$strUsername."&loginpassword=".$strPassword."&returnurl=http://fddb.info/db/i18n/exporter/?lang=de&action=userhistory&q=csv");
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 echo curl_exec($ch);
 curl_close($ch);
?>

Als Antwort erhalte ich leider nur eine leere Zeile. Gebe ich einen falschen usernamen oder Password an, bekomme ich in vbs und php die gleiche Ausgabe.

Kann mir jemand dabei helfen?
Danke und Gruß,
Dietmar

Ich kenn grad die Parameter von CURL nicht auswendig, das einzige was mir da so einfällt ist, dass eventuell der header fehlt und noch gesetzt werden muss

der aufruf besteht ja aus 2 Teilen:

  1. den GET-Parametern mit dem Login, die werden sicher übermittelt
  2. den POST-Parametern, die vielleicht nicht richtig ankommen

für das Login reichen schon die GET, drum liefert es einen Fehler, aber keine Daten

hab grad nochmal nachgesehen in der doku, das müsste noch ein set mit CURLOPT_POST sein.

Hallo PICS,

danke für deine Hilfe. Ich habe mal ein
curl_setopt($ch, CURLOPT_POST, 1); und ein curl_setopt($ch, CURLOPT_POST, 0); eingefügt.
Bei der 1 bleibt das Ergebnis gleich, bei der 0 bekomme ich einen Body in dem beschrieben wird, das der benutzername midestens 4 Zeich lang sein muss.

Ich habe das ganze gerade nochmal interaktiv auf der Website ausgführt. Dabei ist mir dann aufgefallen, das die Daten gar nicht im Body, sondern als download transferiert werden.

Hast du dazu eine Idee?

So, ich habe das jetzt mal wie folgt geändert:


<?
$strUsername="xx";
$strPassword="xx";
$path="test.csv";

$ch = curl_init("http://fddb.info/db/i18n/account/?lang=de&action=login");
 curl_setopt($ch, CURLOPT_POSTFIELDS, "loginemailorusername=".$strUsername."&loginpassword=".$strPassword."&returnurl=http://fddb.info/db/i18n/exporter/?lang=de&action=userhistory&q=csv");
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $data=curl_exec($ch);
 curl_close($ch);
file_put_contents("test.csv", $data);
?>


Aber die datei ist leer.

Hallo,

vieleicht hilft noch ein

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

weiter, denn Loginseite und Downloadseite scheinen unterschiedlich zu sein.

Hallo Rolf-L

ich habe ausser:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

nun auch mal ein:
curl_setopt($ch, CURLOPT_HEADER, 1);

eingebaut. Und siehe da, ohne CURLOPT_FOLLOWLOCATION (oder auf false gesetzt) bekomme ich ein:
HTTP/1.1 302 Found
Date: Fri, 28 Dec 2012 08:53:25 GMT
Server: Apache
X-Powered-By: PHP/5.2.12-nmm4
Set-Cookie: PHPSESSID=f688fffee630a91a21d061ca604930c6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Language: en
Set-Cookie: fddb=1091807%2CWNMIO9FP1MU5MIJ3; expires=Sat, 08-Nov-2014 08:53:25 GMT; path=/
Location: http://fddb.info/db/i18n/exporter/?lang=de
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=iso-8859-1

CURLOPT_FOLLOWLOCATION, 1 liefert ein:
HTTP/1.1 302 Found
Date: Fri, 28 Dec 2012 08:55:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.12-nmm4
Set-Cookie: PHPSESSID=7fd801562286d84cc3f4dc4fc4ae3471; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Language: en
Set-Cookie: fddb=1091807%2CWNMIO9FP1MU5MIJ3; expires=Sat, 08-Nov-2014 08:55:59 GMT; path=/
Location: http://fddb.info/db/i18n/exporter/?lang=de
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 200 OK
Date: Fri, 28 Dec 2012 08:55:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.12-nmm4
Set-Cookie: PHPSESSID=187ab8c529c81389370812b4527606db; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Language: de
Vary: Accept-Encoding
Content-Length: 22
Content-Type: text/html; charset=iso-8859-1

aber anstatt der Daten kommt ein:
Keine Daten vorhanden.

CURLOPT_FOLLOWLOCATION und CURLOPT_COOKIEFILE war die Lösung!
Danke!