Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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
ausblenden 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
ausblenden PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?php
// POST-Variablen in Datei nutzer.txt schreiben
echo 'Hallo Welt';                     //nur zu Testzwecken
$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
ausblenden PHP-Quelltext
1:
echo 'Hallo Welt';					

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 21.11.13 23:00 
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
... 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Do 21.11.13 23:08 
Und nur dieser String in der Stringlist? :D Alles was verrückt ist, kann bei Indy helfen.

Oder versuch mal so:
stackoverflow.com/qu...ost-url-using-delphi
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 21.11.13 23:16 
user profile iconFinnO und ich sind uns grade einig, dass POST mit Indy doof war und wir die POST-Daten immer irgendwie zusammenmcgyvert hatten. Ich hab in einem alten Programm dann das gefunden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var H:TIdHTTP;
    s:TStringStream;
begin
  H:=TIdHTTP.Create(nil);
  s:=TStringStream.Create(Data);
  try
    h.Request.ContentType:= 'application/x-www-form-urlencoded';
    Result:= H.Post(url,s);
  finally
    s.free;
    H.Free;
  end;

// Daten dann URLEncoded, z.B.
  Data:= 'random=' + s + '&' +
      'token='  + token;


Irgendwann hat das mal funktioniert. Warum, will ich gar nicht wissen :roll:

_________________
"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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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 :P

Dieser Code (siehe auch der von user profile iconMartok) funktioniert:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 21.11.13 23:55 
Ich rate mal... fehlende Schreibrechte?

Wenn du den Code 1:1 auf meinem Server ausprobierst, klappt es problemlos:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 22.11.13 00:01 
Hallo jaenicke
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 :wink: ) 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:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ausblenden 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. :autsch:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Fr 22.11.13 00:15 
Kostenloser Hostinganbieter mit Datenbank?

Für diesen Beitrag haben gedankt: Mathematiker
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 22.11.13 06:42 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Verrückt ist aber, dass die Nutzer.txt, wenn ich sie mit
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 22.11.13 12:17 
Hallo jaenicke,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 22.11.13 20:11 
Hallo,
ich habe jetzt, dank user profile iconjaenickes Demoprojekt, mein Ziel so gut wie erreicht.
Erstens muss ich 'w+' gegen 'a+' tauschen
ausblenden 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. :lol:

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



BeitragVerfasst: Fr 22.11.13 23:58 
"Für uns alle ist Internet Neuland."

Angela Merkel, 2013