We help IT Professionals succeed at work.

using TWebBrowser ....

m_adil
m_adil asked
on
Hi,
How can i get the status code returned by the web server using TWebBrowser. status code means the code that web server returns in case of error (i.e. 404 for file not found etc, etc)

Thanks
Comment
Watch Question

This from Delphi Help:



Returns information about what commands the Web browser supports.

type

  OLECMDID = TOleEnum;

  OLECMDF = TOleEnum;

function  QueryStatusWB(cmdID: OLECMDID): OLECMDF;

Description

Use QueryStatusWB to determine what commands can be executed using the ExecWB method. QueryStatusWB uses the QueryStatus method of the IOleCommandTarget interface to obtain information about the status of commands. For more information, see the Microsoft documentation of IOleCommandTarget.

cmdID specifies the command about which you want information. See the ExecWB method for a list of possible cmdID values.

QueryStatusWB returns a value made by adding together zero of more of the following:

Constant     Value     Meaning

OLECMDF_SUPPORTED     1     The Web browser control supports the command (but it may not be enabled).
OLECMDF_ENABLED     2     The command is currently enabled.
OLECMDF_LATCHED     4     The command is an on/off toggle that is currently on.
OLECMDF_NINCHED     8     Not currently used.
What your looking for is HTTP_QUERY_STATUS_CODE. I do not know how to get this using the webbrowser control. You could however use a couple of api calls to get the header status code. You would do this in the BeforeNavigate2 event. Here is an example of doing it this way. In this sample I am allowing a Normal 200 status to load but any others are canceled and a message is displayed with the status code.
***********************
Uses:Wininet;

procedure WBBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var
  sAppName: string;
  hSession, hURL: HInternet;
  pBuffer: DWORD;
  BufferLength, Index: DWORD;
  Status: integer;
begin
  sAppName := ExtractFileName(Application.ExeName);
  Status := 0;
  hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if hSession <> nil then
  try
    hURL := InternetOpenURL(hSession, PChar(VarToStr(URL)), nil, 0, INTERNET_FLAG_NO_CACHE_WRITE + INTERNET_FLAG_RELOAD, 0);
    Index := 0;
    BufferLength := 20;
    if HttpQueryInfo(hURL, HTTP_QUERY_STATUS_CODE + HTTP_QUERY_FLAG_NUMBER, @pBuffer, BufferLength, Index) then
      Status := pBuffer;
    try
      if Status <> 200 then
      begin
        Cancel := True;
        ShowMessage('HTTP Status Code Is: ' + IntToStr(Status));
      end;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;
*********************

Rick

Commented:
The indy http client vcl will give you access to the headers too. I've searched high & low, tried many things, but I do not know how to get this info from IE.

GL
Mike

Commented:
Question(s) below appears to have been abandoned. Your options are:
 
1. Accept a Comment As Answer (use the button next to the Expert's name).
2. Close the question if the information was not useful to you. You must tell the participants why you wish to do this, and allow for Expert response.
3. Ask Community Support to help split points between participating experts, or just comment here with details and we'll respond with the process.
4. Delete the question. Again, please comment to advise the other participants why you wish to do this.

For special handling needs, please post a zero point question in the link below and include the question QID/link(s) that it regards.
http://www.experts-exchange.com/jsp/qList.jsp?ta=commspt
 
Please click the Help Desk link on the left for Member Guidelines, Member Agreement and the Question/Answer process.  http://www.experts-exchange.com/jsp/cmtyHelpDesk.jsp

Please click you Member Profile to view your question history and keep them all current with updates as the collaboration effort continues, to track all your open and locked questions at this site.  If you are an EE Pro user, use the Power Search option to find them.

To view your open questions, please click the following link(s) and keep them all current with updates.
http://www.experts-exchange.com/questions/Q.20085964.html
http://www.experts-exchange.com/questions/Q.20125173.html
http://www.experts-exchange.com/questions/Q.20191794.html
http://www.experts-exchange.com/questions/Q.20230267.html
http://www.experts-exchange.com/questions/Q.20260346.html




PLEASE DO NOT AWARD THE POINTS TO ME.  
 
------------>  EXPERTS:  Please leave any comments regarding your closing recommendations if this item remains inactive another seven (7) days.  Also, if you are interested in the cleanup effort, please click this link http://www.experts-exchange.com/jsp/qManageQuestion.jsp?ta=commspt&qid=20274643
 
Thank you everyone.
 
 

P.S.  For any year 2000 questions, special attention is needed to ensure the first correct response is awarded, since they are not in the comment date order, but rather in Member ID order.