Autor Beitrag
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: So 07.01.07 13:32 
Ich hab mit der Funktion SendPostData (im dsdt.info) versucht eine Seite zu öffnen.
Da wenn mein Modem spinnt und das Programm an ist soll keine Fehlermeldung erscheinen.
Um das Spinnen selber zu machen, habe ich der Firewall gesagt die soll das Programm blocken ^^
Dann hab ich mir gedacht ich mach eine If-Abfrage.
Blos das ist ein Int64 wert (lStream.Size).
Beim Debuggen hatte ich festgestellt, wenn das zugreifen auf der Seite fehlschlägt, bekommt lStream.Size diesen wert:
lStream.Size: Access violation at 009F1FA4 accessing 00000000
Wie schaffe ich es das ich darauf überprüfe, das dann keine Fehlermeldung auftritt, wenn ich auf diesen Wert zugreifen will? Ich hab schon if lStream.Size<1 versucht, da kommt, aber auch ein Error...

Das ist die FUnktion die ich verwende:

ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
function SendPostData(Ahttp: TIdHTTP; const AtoURL: Stringconst aParams: TStrings): String;
  //Ahttp: Die HTTP Komponente von Indy 8.0 bzw. 9.0
  //AtoURL: An diese URL werden die Informationen gesendet
  //Result: HTML-Ergebnis (Antwort des Scripts)
Var
  lStream: TMemoryStream; //HTML-Result des PHP-Scripts
  lParams: TStringStream;
  I: Integer;
begin
  Result:='';
  if not Assigned(aHttp) then
    exit;
  lStream := TMemoryStream.create;
  lParams := TStringStream.create('');
  try
    AHTTP.Request.ContentType := 'application/x-www-form-urlencoded';

    //Dieser Stream wird letztendlich gesendet
    //Stream mit Werten füllen
    for I:=0 to aParams.Count-1 do
      lParams.WriteString(aParams[I] + '&');

    try
      //Stream an das PHP-Script senden
      AHTTP.Post(AtoURL,
                 lParams,
                 lStream);
    except
      on E: Exception do
        showmessage('Fehler bei der Übertragung: ' + E.Message);
    end;
    SetLength(Result,lStream.Size);
    lStream.Position:=0;
    lStream.ReadBuffer(Result[1],lStream.Size);
  finally
    lParams.Free;
    lStream.Free;
  end;
end;


Aus: [url=dsdt.info/tipps/?id=455]user defined imagePer POST Daten an Scripts senden[/url]

MfG
hui1991
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 07.01.07 13:58 
user profile iconhui1991 hat folgendes geschrieben:
Beim Debuggen hatte ich festgestellt, wenn das zugreifen auf der Seite fehlschlägt, bekommt lStream.Size diesen wert:
lStream.Size: Access violation at 009F1FA4 accessing 00000000

Einw Integervariable bekommt einen String als Wert?? Erstaunlich ... :shock:
Wie auch immer, versuche doch mit einem weiteren try-except block zu arbeiten, also
try wasweisichwasdumitsizemachst except showmessage('Verbindungsfehler'); end;

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: So 07.01.07 14:44 
Dein Vorschlag hab ich ausprobiert, dann öffnete sich der CPU und ich musste die Anwendung mit Strg+F2 beenden.
ICh hab, das dann so gelöst:
ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
function SendPostData(Ahttp: TIdHTTP; const AtoURL: Stringconst aParams: TStrings): String;
  //Ahttp: Die HTTP Komponente von Indy 8.0 bzw. 9.0
  //AtoURL: An diese URL werden die Informationen gesendet
  //Result: HTML-Ergebnis (Antwort des Scripts)
Var
  lStream: TMemoryStream; //HTML-Result des PHP-Scripts
  lParams: TStringStream;
  I, er: Integer;
begin
  er:=0;
  Result:='';
  if not Assigned(aHttp) then
    exit;
  lStream := TMemoryStream.create;
  lParams := TStringStream.create('');
  try
    AHTTP.Request.ContentType := 'application/x-www-form-urlencoded';

    //Dieser Stream wird letztendlich gesendet
    //Stream mit Werten füllen
    for I:=0 to aParams.Count-1 do
      lParams.WriteString(aParams[I] + '&');
    try
      //Stream an das PHP-Script senden
      AHTTP.Post(AtoURL,
                 lParams,
                 lStream);
    except
      on E: Exception do
        er:=1;
    end;
    if er=0 then begin
    SetLength(Result,lStream.Size);
    lStream.Position:=0;
    lStream.ReadBuffer(Result[1],lStream.Size);
    end else
      Showmessage('Es ist ein Fehler aufgetretten');
  finally
    lParams.Free;
    lStream.Free;
  end;
end;


So müsste es dann klappen und bis jetzt sind keine Fehler aufgetretten ^^
Denke das problem ist gelöst.
Vllt kennt jemand eine bessere Lösung.
Soweit ich den Stringwert im Debuger kenne sind Strings mit '' gekennzeichnet, da aber bei dem Fehler kein '' ist, heißt es doch es ein Fehler ist, und zeigt an was für ein Fehler aufgetretten ist ^^
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 07.01.07 18:24 
Was auch immer dein letzter Satz bedeuten sollte...
Deine Lösung ist auf jeden fall ziemlich elegant, nur würd ich er als boolean definieren und das on E:Exception do kannst du weglassen, das brauchst du nur, wenn du mit dem E Objekt weiterarbeiten willst.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: So 07.01.07 19:52 
ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
function SendPostData(Ahttp: TIdHTTP; const AtoURL: Stringconst aParams: TStrings): String;
  //Ahttp: Die HTTP Komponente von Indy 8.0 bzw. 9.0
  //AtoURL: An diese URL werden die Informationen gesendet
  //Result: HTML-Ergebnis (Antwort des Scripts)
Var
  lStream: TMemoryStream; //HTML-Result des PHP-Scripts
  lParams: TStringStream;
  I: Integer;
  er: boolean;
begin
  er:=False;
  Result:='';
  if not Assigned(aHttp) then
    exit;
  lStream := TMemoryStream.create;
  lParams := TStringStream.create('');
  try
    AHTTP.Request.ContentType := 'application/x-www-form-urlencoded';

    //Dieser Stream wird letztendlich gesendet
    //Stream mit Werten füllen
    for I:=0 to aParams.Count-1 do
      lParams.WriteString(aParams[I] + '&');
    try
      //Stream an das PHP-Script senden
      AHTTP.Post(AtoURL,
                 lParams,
                 lStream);
    except
      er:=True;
    end;
    if not er then begin
    SetLength(Result,lStream.Size);
    lStream.Position:=0;
    lStream.ReadBuffer(Result[1],lStream.Size);
    end else
      Showmessage('Es ist ein Fehler aufgetretten');
  finally
    lParams.Free;
    lStream.Free;
  end;
end;


Denke so ist es besser ^^
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: So 14.01.07 13:00 
Okay, mir hat gerade eben die Firewall das gesammte Internet gekappt.
Ich hab im hintergrund noch das Programm gehabt und in diesem Augenblick wollte er drauf zugreifen:
ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
function SendPostData(Ahttp: TIdHTTP; const AtoURL: Stringconst aParams: TStrings): String;
  //Ahttp: Die HTTP Komponente von Indy 8.0 bzw. 9.0
  //AtoURL: An diese URL werden die Informationen gesendet
  //Result: HTML-Ergebnis (Antwort des Scripts)
Var
  lStream: TMemoryStream; //HTML-Result des PHP-Scripts
  lParams: TStringStream;
  I: Integer;
  er: boolean;
begin
  er:=False;
  Result:='';
  if not Assigned(aHttp) then
    exit;
  lStream := TMemoryStream.create;
  lParams := TStringStream.create('');
  try
    AHTTP.Request.ContentType := 'application/x-www-form-urlencoded';

    //Dieser Stream wird letztendlich gesendet
    //Stream mit Werten füllen
    for I:=0 to aParams.Count-1 do
      lParams.WriteString(aParams[I] + '&');
    try
      //Stream an das PHP-Script senden
      AHTTP.Post(AtoURL,
                 lParams,
                 lStream);
    except
      er:=True;
    end;
    if not er then begin
    SetLength(Result,lStream.Size);
    lStream.Position:=0;
    lStream.ReadBuffer(Result[1],lStream.Size);
    end else
      Showmessage('Es ist ein Fehler aufgetretten');
  finally
    lParams.Free;
    lStream.Free;
  end;
end;


Auf der Markierten stelle kam eine Access Violation, mit irgendeiner fehler wert usw.
Das passiert auch dort. Wenn ich im finally auch das mit er überprüfe springt er auf end; und löst dort den Fehler aus.
Was kann ich dagegen machen?
Wie kann ich davor schon überprüfen ob es eine Verbindung zum Internet gibt?

MfG
hui1991
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 14.01.07 15:15 
Fehler tretten nicht auf ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    IdHTTP1.Host := '127.0.0.1';
    Try
        IdHTTP1.Connect(5000);
    Except showmessage('asd');
    End;

Das ist nicht elegant und funktioniert auch nur dann, wenn die Firewall (wie ZoneAlarm) die Verbindung komplett unterdrückt. Aber naja... das einzige was mir einfällt ... :/

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.