Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Problem bei Seitenabfrage über Indy (https://www.delphipraxis.net/192202-problem-bei-seitenabfrage-ueber-indy.html)

stifflersmom 28. Mär 2017 14:22

Problem bei Seitenabfrage über Indy
 
Moin,

ich versuche mit Indy eine Seite aufzurufen, genauer gesagt eine Umsatzsteuer-ID über die Portalseite des Bundesamtes für Finanzen zu überprüfen und bekomme immer eine Bad Request Exception und kann nicht verstehen warum...

Die übergebene Url im Browser funktioniert so wie es soll.

Code:
 sUrllong := 'http://evatr.bff-online.de/evatrRPC?UstId_1=###agustid###&UstId_2=###customersustid###' +
 '&Firmenname=###firmenname###&Ort=###firmaort###&PLZ=###firmaplz###&Strasse=###firmastrasse###' +
 '&Druck=ja ';

 sUrlLong := StringReplace(sUrlLong,'###customersustid###',aAdressenRec.Land+aAdressenRec.ust_id_nr,[rfIgnoreCase, RfReplaceAll]);
 sUrlLong := StringReplace(sUrlLong,'###agustid###',sagustid,[rfIgnoreCase, RfReplaceAll]);

 If ShortQuery Then
  Begin
    sUrlLong := StringReplace(sUrlLong,'###firmenname###','',[rfIgnoreCase, RfReplaceAll]);
    sUrlLong := StringReplace(sUrlLong,'###firmaort###','',[rfIgnoreCase, RfReplaceAll]);
    sUrlLong := StringReplace(sUrlLong,'###firmaplz###','',[rfIgnoreCase, RfReplaceAll]);
    sUrlLong := StringReplace(sUrlLong,'###firmastrasse###','',[rfIgnoreCase, RfReplaceAll]);
  End
  else
   Begin
    sUrlLong := StringReplace(sUrlLong,'###firmenname###',aAdressenRec.Name,[rfIgnoreCase, RfReplaceAll]);
    sUrlLong := StringReplace(sUrlLong,'###firmaort###',aAdressenRec.Ort,[rfIgnoreCase, RfReplaceAll]);
    sUrlLong := StringReplace(sUrlLong,'###firmaplz###',aAdressenRec.Plz,[rfIgnoreCase, RfReplaceAll]);
    sUrlLong := StringReplace(sUrlLong,'###firmastrasse###',aAdressenRec.Strasse,[rfIgnoreCase, RfReplaceAll]);
   End;


    FormMain.Add_Debug('UST-ID Abfrage über Bundeszentralamt für Steuern ###############'+
    #13#10+sUrlLong);

   Try
     idHttp1 := TIdHTTP.Create;
     responseStream := TMemoryStream.Create;
     Screen.Cursor := crHourGlass;
    try
    IdHTTP1.Get(sUrlLong, responseStream);

    except on E: EIdException Do
      FormMain.add_info('UST Abfrage gescheitert '+E.Message);

    end;
    SetString(resultstring, PAnsiChar(responseStream.Memory), responseStream.Size);

   Finally
     idHttp1.Free;
     responseStream.Clear;
     responseStream.Free;
     Screen.Cursor := crDefault;
   End;
Nachtrag:
Leite ich die Abfrage über Fiddler als Proxy-Server, dann funktioniert es so wie es soll. Nur die direkte Abfrage knallt gegen die Wand...

nahpets 28. Mär 2017 14:51

AW: Problem bei Seitenabfrage über Indy
 
Bad Request Exception lässt darauf schließen, dass in der URL irgendwas nicht stimmt.

Habe den Quelltext mal ein bisserl angepasst (ungetestet):
Delphi-Quellcode:
  sUrllong := 'http://evatr.bff-online.de/evatrRPC?UstId_1=%s&UstId_2=%s&Firmenname=%s&Ort=%s&PLZ=%s&Strasse=%s&Druck=ja';
  If ShortQuery Then
  Begin
    sUrllong := Format('http://evatr.bff-online.de/evatrRPC?UstId_1=%s&UstId_2=%s'
              + '&Firmenname=%s&Ort=%s&PLZ=%s&Strasse=%s&Druck=ja',[
                 sagustid,                                // agustid,
                 aAdressenRec.Land+aAdressenRec.ust_id_nr, // customersustid
                 '', // firmenname
                 '', // firmaort,
                 '', // firmaplz,
                 '' // firmastrasse
                ]);
  End
  else
  Begin
    sUrllong := Format('http://evatr.bff-online.de/evatrRPC?UstId_1=%s&UstId_2=%s'
              + '&Firmenname=%s&Ort=%s&PLZ=%s&Strasse=%s&Druck=ja',[
                 sagustid,                               // agustid,
                 aAdressenRec.Land+aAdressenRec.ust_id_nr // customersustid,
                 aAdressenRec.Name,                      // firmenname,
                 aAdressenRec.Ort,                       // firmaort,
                 aAdressenRec.Plz,                       // firmaplz,
                 aAdressenRec.Strasse                    // firmastrasse
               ]);
   End;
    FormMain.Add_Debug('UST-ID Abfrage über Bundeszentralamt für Steuern ###############'+
    #13#10+sUrlLong);

   Try
     idHttp1 := TIdHTTP.Create;
     responseStream := TMemoryStream.Create;
     Screen.Cursor := crHourGlass;
    try
      IdHTTP1.Get(sUrlLong, responseStream);
      IdHTTP1.Disconnect(True);
    except on E: EIdException Do
      FormMain.add_info('UST Abfrage gescheitert '+E.Message);
    end;
    SetString(resultstring, PAnsiChar(responseStream.Memory), responseStream.Size);
   Finally
     idHttp1.Free;
     responseStream.Clear;
     responseStream.Free;
     Screen.Cursor := crDefault;
   End;
Wenn Du die bei FormMain.Add_Debug ausgegebene sUrlLong unverändert im Browser eingibst, funktioniert das?

Da ich keine Ahnung habe, welche Werte genau übergeben werden müssen, hab' ich es mal mit Nonsens versucht.
Es wird ein Ergebnis geliefert, welches besagt, dass meine Daten Nonsens sind.

Es wird aber keine Exception geworfen.

stifflersmom 28. Mär 2017 14:53

AW: Problem bei Seitenabfrage über Indy
 
Ja, die über die Debug-funktion geloggte Url funktioniert euinwandfrei im Browser.

Und wie gesagt, über den Fiddler-Proxy funktioniert es auch...

TiGü 28. Mär 2017 14:57

AW: Problem bei Seitenabfrage über Indy
 
Debug mal hinterher, ob Indy die URL nicht noch irgendwie encodiert und das die Gegenseite nicht annimmt. So einen Fall hatte ich gerade auch.

stifflersmom 28. Mär 2017 15:02

AW: Problem bei Seitenabfrage über Indy
 
Das abstellen der hoForceEncodedParams brachte schon mal nichts...
Code:
idHttp1.HTTPOptions := [];

stifflersmom 28. Mär 2017 16:43

AW: Problem bei Seitenabfrage über Indy
 
Tatsächlich war es die "nicht vorhandene" Encodierung der Url.
Also Danke an Nahpets, Du hast mich in die richtige Richtung gestossen.

Man beachte das %20%20 hinter dem ja am Ende...

17:40:23:512 - UST-ID Abfrage über Bundeszentralamt für Steuern BEFORE ENCODE
http://evatr.bff-online.de/evatrRPC?...asse=&Druck=ja
17:40:23:512 - UST-ID Abfrage über Bundeszentralamt für Steuern AFTER ENCODE
http://evatr.bff-online.de/evatrRPC?...Druck=ja%20%20

Vielen Dank an alle

nahpets 28. Mär 2017 17:00

AW: Problem bei Seitenabfrage über Indy
 
Sind die beiden Leerzeichen (%20%20) am Ende denn wirklich erforderlich?

Im Browser werden sie jedenfalls nicht benötigt.

stifflersmom 28. Mär 2017 17:20

AW: Problem bei Seitenabfrage über Indy
 
Ich hatte den Link per Copy&Paste in die Anwendung geholt und weiß das jetzt so ad hoc nicht wirklich, denke aber, dass mir mein beherzter Doppelklick da ein Bein gestellt hat...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz