Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#16

AW: Anmelden an Webmodul über IdHTTP

  Alt 10. Apr 2013, 15:38
Hallo Thom,

nö, funktioniert nicht.

Der Datenaustausch zwischen Webserver und DLL erfolgt über den TEXTENSION_CONTROL_BLOCK. In Delphi 7 ist er so definiert:
Delphi-Quellcode:
 TEXTENSION_CONTROL_BLOCK = packed record
    cbSize: DWORD; // size of this struct.
    dwVersion: DWORD; // version info of this spec
    ConnID: HCONN; // Context number not to be modified!
    dwHttpStatusCode: DWORD; // HTTP Status code
             // null terminated log info specific to this Extension DLL
    lpszLogData: array [0..HSE_LOG_BUFFER_LEN-1] of Char;
    lpszMethod: PChar; // REQUEST_METHOD
    lpszQueryString: PChar; // QUERY_STRING
    lpszPathInfo: PChar; // PATH_INFO
    lpszPathTranslated: PChar; // PATH_TRANSLATED
    cbTotalBytes: DWORD; // Total bytes indicated from client
    cbAvailable: DWORD; // Available number of bytes
    lpbData: Pointer; // pointer to cbAvailable bytes
    lpszContentType: PChar; // Content type of client data

    GetServerVariable: TGetServerVariableProc;
    WriteClient: TWriteClientProc;
    ReadClient: TReadClientProc;
    ServerSupportFunction: TServerSupportFunctionProc;
  end;
Zu finden in der \source\rtl\win\Isapi2.pas.

Die Werte aus diesem Block werden letztlich mit dieser Routine gelesen:
Delphi-Quellcode:
function TISAPIRequest.GetStringVariable(Index: Integer): string;
begin
  case Index of
    0: Result := ECB.lpszMethod;
    3: Result := ECB.lpszQueryString;
    4: Result := ECB.lpszPathInfo;
    5: Result := ECB.lpszPathTranslated;
    1..2, 6..24, 26..28: Result := GetFieldByName(ServerVariables[Index]);
    25: if ECB.cbAvailable > 0 then
      SetString(Result, PChar(ECB.lpbData), ECB.cbAvailable);
   else
      Result := '';
  end;
end;
Die möglichen, zu lesenden Werte sind:
Delphi-Quellcode:
const
  ServerVariables: array[0..28] of string = (
    '',
    'SERVER_PROTOCOL',
    'URL',
    '',
    '',
    '',
    'HTTP_CACHE_CONTROL',
    'HTTP_DATE',
    'HTTP_ACCEPT',
    'HTTP_FROM',
    'HTTP_HOST',
    'HTTP_IF_MODIFIED_SINCE',
    'HTTP_REFERER',
    'HTTP_USER_AGENT',
    'HTTP_CONTENT_ENCODING',
    'CONTENT_TYPE',
    'CONTENT_LENGTH',
    'HTTP_CONTENT_VERSION',
    'HTTP_DERIVED_FROM',
    'HTTP_EXPIRES',
    'HTTP_TITLE',
    'REMOTE_ADDR',
    'REMOTE_HOST',
    'SCRIPT_NAME',
    'SERVER_PORT',
    '',
    'HTTP_CONNECTION',
    'HTTP_COOKIE',
    'HTTP_AUTHORIZATION');
Es ist mir bisher nicht gelungen, an andere Werte zu kommen.

Ist dieser Kommentar aus der Isapi2.pas eventuell von Bedeutung?
Delphi-Quellcode:
{       Structure definitions and prototypes for the    }
{       version 2.0 HTTP Server Extension interface.    }
Sprich: Hat sich da in der Version was verändert?

Irgendwie weiß ich momentan nicht weiter. Die Anmeldedaten sind in einer DLL wohl sehr geheim
  Mit Zitat antworten Zitat