Autor |
Beitrag |
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 21.11.13 22:42
Hallo,
nachdem ich mich stundenlang durch die vielen, vielen Beiträge zu IdHttp.post gekämpft habe, bin ich weiterhin ratlos.
Ich versuche mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure Tform1.Download1Click(Sender: TObject); var idhttp1:tidhttp; datei:tfilestream; begin IdHttp1:=tidhttp.create; Datei:=TFileStream.create('nutzer.txt',fmCreate); try IdHttp1.Get('http://www.kepler.c.sn.schule.de/polster/nutzer.txt',Datei); finally Datei.free; end; IdHttp1.free; end;
procedure Tform1.Upload1Click(Sender: TObject); var idhttp1:tidhttp; daten:tstringlist; begin IdHttp1:=tidhttp.create; Daten:=Tstringlist.create; try daten.add('Testdaten'); IdHttp1.post('http://www.kepler.c.sn.schule.de/polster/nutzer.php',Daten); finally Daten.free; end; IdHttp1.free; end; |
die Datei nutzer.txt mit get zu laden, was perfekt funktioniert.
Versuche ich mit post zu senden, bekomme ich das berühmte "Connection gracefully closed". Nach den ganzen Kommentaren in der EE zu dieser Meldung, vermute ich, dass kann alles sein.
Zuerst vermutete ich, dass die PHP-Datei fehlerhaft ist. Die PHP-Datei auf dem Server ist
PHP-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| <?php echo 'Hallo Welt'; $fp = fopen('nutzer.txt', 'w+'); if ($fp) { foreach($_POST as $Var => $Val) fputs($fp,$Var.' = '.$Val."\n\r"); fclose($fp); } ?> |
und soll eigentlich die übermittelten Daten in die Nutzer-Datei schreiben.
Das macht sie aber nicht, da wie gesagt, die "gracefully" Fehlermeldung kommt.
Die Zeile
PHP-Quelltext
habe ich nur eingefügt, um zu testen, ob überhaupt irgendetwas geschieht. Rufe ich die PHP-Datei mit get bekomme ich eine Datei zurück mit 'Hallo Welt', wie zu erwarten.
Was mache ich falsch?
Beste Grüße und Danke für Hinweise
Mathematiker
PS: Ich verspreche, dass dies erst einmal meine letzte Anfrage zu IdHttp ist. In Zukunft wende ich mich wieder den Dingen zu, die ich einigermaßen kann. Aber es ärgert mich, dass es einfach nicht funktioniert.
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 21.11.13 22:52
Moin,
vorab: Ahnung habe ich auch nicht wirklich, aber hast du mal versucht nicht nur einen einzelnen Eintrag einer Stringlist zu posten, sondern einen String der Form 'name1=Test&name2=Bratwurst&datum=230114'?
Beste Grüße
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 21.11.13 23:00
FinnO hat folgendes geschrieben : | ... hast du mal versucht nicht nur einen einzelnen Eintrag einer Stringlist zu posten, sondern einen String der Form 'name1=Test&name2=Bratwurst&datum=230114'? |
Habe ich gerade versucht, leider ohne Ergebnis.
Einen einzelnen String interprediert er als Dateinamen, warum auch immer, und unterbricht "gracefully".
Mehrere Strings in der Liste enden auch mit dem "anmutigen" Abbruch. Was ist daran eigentlich anmutig?
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 21.11.13 23:08
Und nur dieser String in der Stringlist? Alles was verrückt ist, kann bei Indy helfen.
Oder versuch mal so:
stackoverflow.com/qu...ost-url-using-delphi
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Do 21.11.13 23:16
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Für diesen Beitrag haben gedankt: Mathematiker
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 21.11.13 23:29
Moin Mathematiker,
dir zuliebe habe ich tatsächlich nochmal (seit Ewigkeiten) mein Delphi angeheizt und siehe da: Du hast einen Serverseitigen Fehler
Dieser Code (siehe auch der von Martok) funktioniert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var s:TStringStream; begin
s:=TStringStream.Create(); s.WriteString('name=Mathematiker'); try idhttp1.Request.ContentType:= 'application/x-www-form-urlencoded'; Memo1.Text := idhttp1.Post('http://httpbin.org/post',s); finally s.free; end; end; |
ändert man die URL jedoch auf die von dir angegebene, zeigt sich keine Veränderung deiner Datei.
Nützlicher Link [1]
Beste Grüße
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 21.11.13 23:49
Hallo Martok, Hallo FinnO,
danke für die schnelle Hilfe.
Ich werde alles probieren und morgen erst einmal klären, warum unser Schulserver sich weigert, mein Zeug zu verarbeiten.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 21.11.13 23:55
Ich rate mal... fehlende Schreibrechte?
Wenn du den Code 1:1 auf meinem Server ausprobierst, klappt es problemlos: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var Http: TIdHTTP; PostData: TStringList; begin Http := TIdHTTP.Create; PostData := TStringList.Create; try PostData.Add('a=Testdaten'); Http.Post('http://fleet-federation.de/game/test/test.php', PostData); finally PostData.free; end; Http.free; end; | Ergebnisdatei:
fleet-federation.de/game/test/nutzer.txt
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 22.11.13 00:01
Hallo jaenicke
jaenicke hat folgendes geschrieben : | Ich rate mal... fehlende Schreibrechte? |
Das wird es wohl sein, oder aber der Server ist wieder mal "halb defekt". Kommt öfters vor, aber wir haben ja auch von billigsten Anbieter die Technik bekommen (öffentlicher Dienst).
Nachtrag: Ich habe mir gerade mal httpbin.org/post angesehen.
Verstehe ich es richtig, dass man unter dieser Adresse kurzzeitig (1 Monat lang ) eine Datei ablegen und verändern kann, ohne größere Rechteprobleme.
Konkret will ich eigentlich nur Folgendes:
Aus einem Programm heraus, dass verschiedene Nutzer haben, soll immer, wenn eine Aufgabe geschafft wurde, nur gesendet werden, wer, welche Aufgabe erfüllt hat. Diese Meldungen kommen hintereinander in eine Textdatei.
Im Programm selbst wird zur Auswertung die "Nutzer.txt" geladen (geht ja problemlos) und eine "Rangliste" ermittelt. Die Datei brauche ich nur etwa 1 Monat. Danach hat es sich erledigt.
Wenn es mit dem Schulserver nichts wird, seht ihr dann eine andere Möglichkeit?
Beste Grüße und Danke für alle Hinweise
Mathematiker
Nachtrag2:
jaenicke hat folgendes geschrieben : | Wenn du den Code 1:1 auf meinem Server ausprobierst, klappt es problemlos: |
Ich war einmal so frei und habe es probiert. Post bringt keinen Fehler.
Verrückt ist aber, dass die Nutzer.txt, wenn ich sie mit
Delphi-Quelltext 1:
| IdHttp1.Get('http://fleet-federation.de/game/test/nutzer.txt',Datei); |
rufe, leer ist.
Ich bin dafür wahrscheinlich doch zu dämlich.
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Zuletzt bearbeitet von Mathematiker am Fr 22.11.13 00:16, insgesamt 1-mal bearbeitet
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Fr 22.11.13 00:15
Kostenloser Hostinganbieter mit Datenbank?
Für diesen Beitrag haben gedankt: Mathematiker
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 22.11.13 06:42
Mathematiker hat folgendes geschrieben : | Verrückt ist aber, dass die Nutzer.txt, wenn ich sie mit
Delphi-Quelltext 1:
| IdHttp1.Get('http://fleet-federation.de/game/test/nutzer.txt',Datei); |
rufe, leer ist. |
Mit "a=Testdaten" als Postdaten? Oder nur mit "Testdaten" wie in deinem ersten Code?
Wenn du nur "Testdaten" schickst, kann es nicht gehen, da das Serverskript nur Wertnamen mit Werten schreibt.
Im Anhang liegt ein Demoprojekt.
Auf dem Server habe ich nur den falschen Zeilenumbruch \n\r ersetzt, damit keine Leerzeilen in der Datei angezeigt werden.
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 22.11.13 12:17
Hallo jaenicke,
jaenicke hat folgendes geschrieben : | Mit "a=Testdaten" als Postdaten? ...
Im Anhang liegt ein Demoprojekt. |
Vielen Dank.
Langsam beginne ich das ganze Verfahren zu verstehen und Dein Demoprojekt funktioniert wunderbar.
Eines meiner großen Probleme ist, dass ich dieses PHP-Script nur durch "Abschreiben" von verschiedenen Seiten zusammengebastelt habe und nicht wirklich weiß, was ich da gemacht habe. U.a. glaubte ich, dass die vorhandene Datei Nutzer.txt bei weiteren Post-Daten ergänzt wird. Ein dummer Denkfehler, da ja die Datei dann neu erzeugt wird und nur die letzten Daten gespeichert werden.
Fazit: Auch zur dieser Problematik muss ich noch 'ne Menge lernen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Fr 22.11.13 13:46
Moin,
für deine Anwendung sind Textdateien wirklich eher unorthodox. Ich würde dir durchaus empfehlen, alle Dinge, wo irgendwelche Daten miteinander verknüpft werden sollen, als Datenbankanwendung zu realisieren. Zufällig ist PHP die Sprache, in der Datenbankabfragen gefühlt am leichtesten zu integrieren sind. Mit Textdateien hast du neben der nicht vorhandenen Sicherheit vermutlich eh noch mehr Arbeit. Aber das artet hier in Offtopic aus.
Gruß
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 22.11.13 20:11
Hallo,
ich habe jetzt, dank jaenickes Demoprojekt, mein Ziel so gut wie erreicht.
Erstens muss ich 'w+' gegen 'a+' tauschen
PHP-Quelltext 1:
| $fp = fopen('nutzer.txt', 'a+'); |
Zweitens funktionieren Post und Get sehr gut und die Auswertung einer fiktiven Liste klappt auch fehlerfrei.
Jetzt warte ich noch auf die Freischaltung meines neuen Freehosting-Bereichs und dann ist alles wunderbar in Ordnung.
Auch wenn die Profis hier wahrscheinlich lächeln werden, so ist für mich(!) faszinierend, was man alles machen kann.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 22.11.13 23:58
"Für uns alle ist Internet Neuland."
Angela Merkel, 2013
|
|
|