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