Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Webseite ansprechen mit WinInet Funktionen (https://www.delphipraxis.net/94243-webseite-ansprechen-mit-wininet-funktionen.html)

little_budda 18. Jun 2007 17:40


Webseite ansprechen mit WinInet Funktionen
 
Hallo,

ich möchte eine Seite auf einem Webserver aufrufen welcher einen Benutzeranmeldung erfordert.
Ich verwender hierfür die WinInet Funktionen.
Die Authorisierung am Server klappt auch wunderbar, nur bekomme ich das ansprechen der Webseite nicht hin.
Ich verwende folgenden Code:
Delphi-Quellcode:
function resetBgr(szHost, szUser, szPW: pchar):boolean;
var sUrlLine : string;
begin

  result := true; // vorbelegen

  setzeProtokollEintrag('Reset auslösen auf :' + string(szhost), true);
  Application.ProcessMessages;
  sUrlLine := 'http://' + string(szHost) +'/ResetWb?HvReset=True';

  // Connect aufbauen
  hIntSession := InternetOpen('RESET-CLIENT', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if hIntSession = nil then
    begin
      setzeProtokollEintrag('Internet-Session konnte nicht geöffnet werden', true);
      result := false;
      exit;
    end
  else
    begin
      InternetSetStatusCallback(hIntSession, @StatusCallback);
      setzeProtokollEintrag('Internet-Session erfolgreich angelegt', true);
    end;
 
  // Anmelden
  hFTPSession := InternetConnect(hIntSession, szHost, INTERNET_DEFAULT_HTTP_PORT, szUser, szPW, INTERNET_SERVICE_HTTP, 0, 0);
  if hFTPSession = nil then
    begin
      setzeProtokollEintrag('HTTP-Session konnte nicht geöffnet werden', true);
      InternetCloseHandle(hIntSession); // Connect schließen
      result := false;
    end
  else
    begin
     
      setzeProtokollEintrag('HTTP-Session erfolgreich angelegt', true);

      // URL ansprechen
      hDummyValue := InternetOpenUrl(hIntSession, PChar(sUrlLine), nil, 0, INTERNET_FLAG_RELOAD, 0);

// Hier ist mein Problem.
// Der Rückgabewert ist immer NIL

      if (hDummyValue = nil) then
        begin
          setzeProtokollEintrag('Der Dienst konnte nicht angesprochen werden', true);
          result := false;
        end
      else
        begin
          InternetSetStatusCallback(hIntSession, @StatusCallback);
          setzeProtokollEintrag('Die Anforderung wurde erfolgreich abgesetzt', true);
        end;
      InternetCloseHandle(hIntSession); // Connect schließen
    end;
end;
Ich wäre sehr dankbar für eine Hilfe oder einen Tipp.

Ich hab es vorher versucht mit "ShellExecute"
aber da lande ich immer bei der Benutzeranmeldung des Servers.

Gruß Holger.

:gruebel:

CCRDude 18. Jun 2007 17:55

Re: Webseite ansprechen mit WinInet Funktionen
 
Aus der MSDN zu InternetOpenUrl:
Zitat:

To retrieve a specific error message, call GetLastError. To determine why access to the service was denied, call InternetGetLastResponseInfo.
Beispiel für WinINet-Internet-Zugriffe, allerdings nicht mit InternetOpenUrl, sondern den Http*-Funktionen.

marabu 18. Jun 2007 17:59

Re: Webseite ansprechen mit WinInet Funktionen
 
Hallo Holger,

HTTP ist ein stateless protocol - die Tatsache, dass du dich angemeldet hast, muss bei einem Seitenaufruf innerhalb des realm irgendwie mitgeteilt werden. Das kann ein Cookie sein, der dann als Header übermittelt wird, oder eine Session-Id, die als URL-Parameter auftauchen muss. Du sendest keine Header und auch keine Session-ID.

Was bei dir genau benötigt wird, dass kannst du feststellen indem du eine Session im normalen Browser analysierst. Ich mache das mit dem FireFox und der Extension LiveHTTPHeaders.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.

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