Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   HTTP_QUERY_LOCATION gibt leeren String aus (https://www.delphipraxis.net/174003-http_query_location-gibt-leeren-string-aus.html)

DavidKlimas 27. Mär 2013 20:03


HTTP_QUERY_LOCATION gibt leeren String aus
 
Guten Abend alle zusammen.

Ich hab eine Funktion die überprüft ob eine URL existiert und mit die exakte URL zurückgibt (im fall einer weiterleitung). Leider ist der wert immer leer. Woran kann der fehler liegen ?

Delphi-Quellcode:
var
  hSession, hfile: hInternet;
  infoBuffer: array [0..512] of char;
  infoBuffer2: array [0..512] of char;
  dummy: DWORD;
  bufLen: DWORD;
Delphi-Quellcode:
  hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if assigned(hsession) then
  begin
    hfile := InternetOpenUrl(hsession,PChar(url),nil,0, INTERNET_FLAG_NO_UI,0);
    {Get Validation}
    dummy := 0;
    bufLen := Length(infoBuffer);
    HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @infoBuffer[0], bufLen, dummy);
    result := (infoBuffer ='200') or (infoBuffer ='302');
    if result then
    begin
      {Get Link}
      dummy := 0;
      bufLen := Length(infoBuffer2);
      HttpQueryInfo(hfile, HTTP_QUERY_LOCATION, @infoBuffer2, bufLen, dummy);
      URL := infoBuffer2;
    End;
    if assigned(hfile) then InternetCloseHandle(hfile);
    InternetCloseHandle(hsession);
  end;
Danke für die Hilfe.

Volker Z. 28. Mär 2013 00:19

AW: HTTP_QUERY_LOCATION gibt leeren String aus
 
Hallo,

wenn ich es richtig verstehe, dann möchtest Du im Falle, dass die angeforderte URL weiterleitet, die Adresse, an die weitergeleitet wird, ermitteln. Wenn dem so ist, dann musst Du das Weiterleiten unterbinden, ansonsten bekommst Du die Headerdaten, die der umgeleitete Webserver sendet (da steht aber meist keine URI drin).

Versuchs mal mit:
Delphi-Quellcode:
hfile := InternetOpenUrl (hsession, PChar (url), nil, 0, INTERNET_FLAG_NO_AUTO_REDIRECT, 0);


Gruß

DavidKlimas 28. Mär 2013 16:46

AW: HTTP_QUERY_LOCATION gibt leeren String aus
 
Volker,

jetzt klappt alles wie es soll. Hier ist die neue funktion. Ich musste auch der Errorcode 301 der anscheinend bei einem redirekt auftritt...

Delphi-Quellcode:
  hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if assigned(hsession) then
  begin
    repeat
    hfile := InternetOpenUrl (hsession, PChar (url), nil, 0, INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
    {Get Validation}
    Buflen := 512;
    Dummy := 0;
    HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @infoBuffer[0], Buflen, Dummy);
    result := (infoBuffer ='200') or (infoBuffer ='301') or (infoBuffer ='302');
    if result then
    begin
      {Get Link}
      Buflen := sizeof(infoBuffer2);
      Dummy := 0;
      HttpQueryInfo(hfile, HTTP_QUERY_LOCATION, @infoBuffer2[0], Buflen, Dummy);
      Str1 := infoBuffer2;
      if Str1 = url then Str1 := '';
      if Str1 <> '' then url := Str1;
    End;
    if assigned(hfile) then InternetCloseHandle(hfile);
    until (result = False) OR (Str1 = '');
    InternetCloseHandle(hsession);
  end;


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

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