Code:
httpSession:=InternetOpen(PChar(tGSNAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(httpSession) then
begin
try
httpConnect:=InternetConnect(httpSession, PAnsiChar(FServerName), FServerPort, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
if Assigned(httpConnect) then
begin
try
httpRequest:=HttpOpenRequest(httpConnect, PChar(FCommand), PChar(FServerScript), nil, nil, nil,
INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_CACHE_WRITE or FSecure, 0);
if Assigned(httpRequest) then
begin
try
// Zet opties: security, timeout limits
dwSize:=SizeOf(dwFlags);
if (InternetQueryOption(httpRequest, INTERNET_OPTION_SECURITY_FLAGS, @dwFlags, dwSize)) then
begin
dwFlags:=dwFlags or SECURITY_FLAG_IGNORE_UNKNOWN_CA or SECURITY_FLAG_IGNORE_CERT_CN_INVALID or SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;
if not(InternetSetOption(httpRequest, INTERNET_OPTION_SECURITY_FLAGS, @dwFlags, dwSize)) then
begin
// Error afhandeling
end;
dwSize := Sizeof (vTimeout) ;
vTimeOut := cTimeOut;
if not ((InternetSetOption(httpRequest, INTERNET_OPTION_CONNECT_TIMEOUT, @vTimeout, dwSize)) and
(InternetSetOption(httpRequest, INTERNET_OPTION_SEND_TIMEOUT, @vTimeout, dwSize)) and
(InternetSetOption(httpRequest, INTERNET_OPTION_RECEIVE_TIMEOUT, @vTimeout, dwSize))) then
begin
// Error afhandeling
end;
InternetQueryOption(httpRequest, INTERNET_OPTION_CONNECT_TIMEOUT, @vTimeout, dwSize);
InternetQueryOption(httpRequest, INTERNET_OPTION_SEND_TIMEOUT, @vTimeout, dwSize);
InternetQueryOption(httpRequest, INTERNET_OPTION_RECEIVE_TIMEOUT, @vTimeout, dwSize);
end
else
begin
// Errro afhandeling
end;
// Nu het feitelijke werk
repeat
begin
HttpSendRequest(httpRequest, pChar(FContentType), Length(FContentType), PChar(Request), Length(Request)); // dit is de body!
dwError := getLastError; //// <<=======================================================
if dwError <> ERROR_SUCCESS then
case dwError of
ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED : begin
// Error afhandeling
end;
end; {ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED }
ERROR_INTERNET_CANNOT_CONNECT, ERROR_INTERNET_NAME_NOT_RESOLVED : begin // (WG1)
// Error afhandeling
end ; {ERROR_INTERNET_CANNOT_CONNECT, ERROR_INTERNET_NAME_NOT_RESOLVED}
ERROR_FILE_NOT_FOUND: begin // (WG5)
// Error afhandeling
end;
else // Alle andere fouten
begin
// Error afhandeling
end;
end; {case}
end;
until (dwError = ERROR_SUCCESS) or (Fstatus <> iGSN_SUCCES);
if dwError = ERROR_SUCCESS then
begin
strmMem:=TMemoryStream.Create;
try
while InternetReadFile(httpRequest, @lpszBuff, SizeOf(lpszBuff), dwSize) do
begin
if (dwSize = 0) then break;
strmMem.Write(lpszBuff, dwSize);
end;
finally
antwoord := StreamToString(StrmMem) ;
// Free the stream
strmMem.Free;
if Antwoord <> '' then
begin
Response := VerwerkAntwoord (Antwoord) ;
end ;
end;
end;
finally
begin
InternetCloseHandle(httpRequest);
end;
end;
end;
finally
begin
InternetCloseHandle(httpConnect);
end;
end;
end else
begin
// Error afhandeling
end;
finally
begin
InternetCloseHandle(httpSession);
end;
end;
end else
...
Deze wordt in beide gevallen aangeroepen: alle variabele gegevens worden extern ingevuld en zijn correct - als gespecificeerd. Request is leeg, en de waarde van FContentType blijkt niet echt relevant; verschillende waarden zijn geprobeerd maar geen heeft effect gehad - evident omdat FCommand = 'GET' voor beide calls.
Bookmarks