CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
09.03.2017, 09:38:58
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
Daten von anderer Seite auslesen
Hallo zusammen,
ich hab hier ein kleines Problem, bei dem ich nicht so recht weiterkomme.
Ich habe hier im Haus einen Stromzähler, der einen LAN-Port hat und einen integrierten Webserver um die Daten anzuzueigen und zu exportieren.
Um auf die Seite zu kommen ist ein Login nötig.
Ich möchte nun gerne per PHP ein automatischen Login und die CSV-Daten in eine MySQL-Datenbank speichern.
Der Login per cURL hat soweit schon geklappt und es werden mir mit dem Script auch ein paar Daten angezeigt allerdings nur ein paar Zeilen - es sollten jedoch weit über 3000 Zeilen sein.
Das Script läuft aber eine gefühlte Ewigkeit und zeigt mir dann noch nur die ersten ca. 50 Zeilen an.
Für mich wäre jetzt einfach wichtig ALLE Daten eine Variable zu bekommen.
Sollte es nötig sein den Webserver temporär von Aussen zugägnglich zu machen wäre das kein Problem.
PHP-Code:
$login_url = 'http://192.168.1.49/index';
//These are the post data username and password $post_data = 'user=admin&password=admin&action=login&login=Login';
//Create a curl object $ch = curl_init();
//Set the useragent $agent = $_SERVER["HTTP_USER_AGENT"]; curl_setopt($ch, CURLOPT_USERAGENT, $agent);
//Set the URL curl_setopt($ch, CURLOPT_URL, $login_url );
//This is a POST query curl_setopt($ch, CURLOPT_POST, 1 );
//Set the post data curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
//We want the content after the query curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//Follow Location redirects curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
/* Set the cookie storing files Cookie files are necessary since we are logging and session data needs to be saved */
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
//Execute the action to login $postResult = curl_exec($ch);
echo curl_error ( $ch );
$content = readfile("http://192.168.1.49/storage?action=download");
echo $content;
|
09.03.2017, 10:03:33
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: Daten von anderer Seite auslesen
Da gibts in dem Script nichts zu tun. Da muss deine Gegenstelle dann halt mehr liefern. Oder was passiert wenn du das im Browser machst?
|
09.03.2017, 10:39:37
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
AW: Daten von anderer Seite auslesen
Geb ich den Link in den Browser ein wird mir ein Download angeboten "export.csv", dieser umfasst auch alle Daten (ca. 1,1 MB groß)
Geb ich den Link im "Quelltext-Modus" ein, so werden mir alle Daten (ca. 3000 Zeilen) am Bildschirm angezeigt. Also der Webserver sollte schon die ganzen Daten ausliefern.
|
09.03.2017, 11:07:50
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: Daten von anderer Seite auslesen
Dann kopier die URL aus dem Browser mal in dein Script und ruf file_get_contents auf.
|
09.03.2017, 11:45:05
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
AW: Daten von anderer Seite auslesen
Die URL vom geposteten Script ist die gleiche wie die,die ich im Brwoser eingebe.
Mit "view-source:" geht es halt nicht, da er dann nix findet.
"view-source:http://192.168.1.49/storage?action=download"
Mit file_get_contents hatte ich es auch schon versucht, da werden noch etwas weniger Daten ausgegeben. Aktuell so an die 10 Zeilen.
Hab mal die Laufzeiten verglichen:
Wenn ich direkt "view-source:http://192.168.1.49/storage?action=download" im Browser aufrufe dauert es ca. 40 Sekunden.
Lass ich das Script laufen, so läuft dieses ca 1:20 Min. mit 10 Einträgen.
Hab mal nur den Login-Teil laufen lassen, allein der Teil benötigt bis zu 1 Min.!
Die Laufzeiten der Skripte sind auf gut 10 Min. gestellt, hier sollte also nichts abgebrochen werden.
|
09.03.2017, 11:57:05
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: Daten von anderer Seite auslesen
Dann musst du halt am Server gucken was das Script da macht. Irgendwo muss das Script dann ja per Client unterscheiden.
|
22.03.2017, 00:35:42
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
AW: Daten von anderer Seite auslesen
Sorry, hatte die Tage wenig Zeit.
Wie ich festgestellt habe, funktioniert wohl schon der Login nicht wirklich da mir die "Login-Fehler Seite" ausgegeben wird.
Für den Login muss nur die lokale Adresse eingegeben werden damit die Login-Felder erscheinen. (z.B. http://sz-haus.ma-home.local)
im Quelltext des Formulars steht folgendes - steh da irgendwie auf dem Schlauch. :-/
HTML-Code:
<form name="login" method="post" action="index">
<br>
<table align="center" bgcolor="#98c2f0" cellpadding="5" cellspacing="5"><tbody>
<tr>
<td class="testo">Benutzername:</td>
<td><input name="user" maxlength="20" style="width: 100px;" type="text"></td>
</tr>
<tr>
<td class="testo">Passwort:</td>
<td><input name="password" maxlength="20" style="width: 100px;" type="password"></td>
</tr>
<input name="action" value="login" type="hidden">
<tr>
<td colspan="2" align="center"><input name="login" title="Login" value="Login" class="invia" type="submit"></td>
</tr>
</tbody></table>
</form>
Mit PHP bzw. cUrl versuche ich mich so einzuloggen und dann die Datei zu speichern.
Username und Password sind korrekt!
PHP-Code:
$username = 'xxxxx';
$password = 'xxxxx';
$loginUrl = 'http://sz-haus.ma-home.loacl';
//init curl
$ch = curl_init();
//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);
// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//Set the post parameters
curl_setopt($ch, CURLOPT_POSTFIELDS, 'user='.$username.'&password='.$password.'&action=login');
//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//execute the request (the login)
$store = curl_exec($ch);
//the login is now done and you can continue to get the
//protected content.
//set the URL to the protected file
curl_setopt($ch, CURLOPT_URL, 'http://sz-haus.ma-home.local/storage?action=download');
//execute the request
$content = curl_exec($ch);
curl_close($ch);
//save the data to disk
file_put_contents('./wr1.csv', $content);
|
22.03.2017, 02:07:54
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Daten von anderer Seite auslesen
PHP-Code:
$loginUrl = 'http://sz-haus.ma-home.loacl';
Ist das ein Schreifehler?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
22.03.2017, 12:05:06
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 186
|
|
AW: Daten von anderer Seite auslesen
Jep das ist ein Fehler, hab ihn schon ausgebesser bzw. auch mal mit der IP-Adresse versucht.
Leider ohne Erfolg.
Gebe ich im Browser ohne vorherigen Login http://sz-haus.ma-home.local/storage.csv ein, so wird mir diese zum Download angeboten.
Versuche ich jedoch wie oben schon beschrieben via file_get_contents, readfile oder fgetcsv direkt auf die Datei zuzugreifen so dauert der Zugriff und es werden nur ein paar Zeilen (ca. 10 von mehr als 2000).
Bricht vielleicht der Webserver des Zählers die Verbindung evtl. einfach ab.
Das Auslesen der Datei mit Hilfe von WGET wie im anderen Thread funktioniert hier leider bislang nicht.
Geändert von AlexD (22.03.2017 um 12:18:36 Uhr)
|
22.03.2017, 13:01:17
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: Daten von anderer Seite auslesen
dann musst du das evtl. reverse engineeren, also im Browser mit F12 die Konsole aufrufen, einen Request abschicken, Header kopieren, und das genau so an den Webservice schicken. fsockopen() könnte da hilfreich sein.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:28:21 Uhr.
|