Results 1 to 6 of 6

Thread: één URL, verschillende status

  1. #1

    één URL, verschillende status

    Communicatie met webserver:
    FServerName = naam van server
    FServerHTTPPort = poort (80 of 443)
    FServerActie = 'GET'
    FServerScript = uit te voeren PHP code (bv. geef de systeemtijd van de server, in ISO formaat)

    Code:
     
    
    httpSession := InternetOpenA( PAnsiChar( tWAAgent ), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
      if Assigned( httpSession ) then
      begin
         try
            httpConnect := InternetConnectA( httpSession, PAnsiChar( FServerName ), FServerHTTPPort, nil, nil, INTERNET_SERVICE_HTTP, 0, 0 );        // Check handle
            if Assigned( httpConnect ) then
            begin
               try
                  httpRequest := HttpOpenRequestA( httpConnect, PAnsiChar( FServerActie ), PAnsiChar(FServerScript), nil, nil, nil,
                                                  INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_CACHE_WRITE, 0 );
                  if Assigned(httpRequest) then
                  begin
                     try
                        if LongTimeout and (SyncTimeout <> 0) then
                        begin
                          ToSize:=SizeOf(dwFlags);
                          toData:=SyncTimeout * 1000 ; // moet in milliseconds; SyncTimeout is seconden
                          dwFlags := INTERNET_OPTION_RECEIVE_TIMEOUT or INTERNET_OPTION_CONNECT_TIMEOUT ;
                          if not (InternetSetOption(httpRequest, dwFlags, @toData, ToSize)) then
                          begin
                            dwError:=GetLastError;
                            FStatus := iWA_SETOPTERR ;
                            FStatusTEkst := format (tWA_SETOPTERR, [IntToStr(dwError)]);
                          end;
                        end;
                        if FStatus = iWA_Succes then
                        begin
                          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
                                dwError:=GetLastError;
                                FStatus := iWA_SETOPTERR ;
                                FStatusTEkst := format (tWA_SETOPTERR, [IntToStr(dwError)]);
                             end;
                          end
                          else
                          begin
                             dwError:=GetLastError;
                             FStatus := iWA_GETOPTERR ;
                             FStatusTEkst := format (tWA_GETOPTERR, [IntToStr(dwError)]);
                          end;
                        end;
    
                        if FStatus = iWA_Succes then
                        begin
    
                          repeat
                            if FContentType <> '' then
                              reqstat := HttpSendRequestA( httpRequest, PAnsiChar( FContentType ), Length( FContentType ), PAnsiChar( Request ), Length( Request ) )
                            else
                              reqstat := HttpSendRequestA( httpRequest, nil, 0, PAnsiChar( Request ), Length( Request ) ) ;
    
                            if reqStat then
                              dwError := ERROR_SUCCESS
                            else
                              dwError := getLastError;
    
                            buflen := length(infobuffer) ;
                            if HttpQueryInfo(httpRequest,HTTP_QUERY_STATUS_CODE,
                                 @infoBuffer[0],bufLen,dummy) then
                            begin
                              FReqStatus := ansileftStr(infoBuffer,buflen);
    Nu maakt het verschil welke poort gebruikt is. Van oorsprong was dat 80. FReqStatus is dan '200'. Als echter gebruik gemaakt wordt van een beveiligde verbinding (normaliter poort 443 maar met elke poort waarachter een beveiligde service hangt) is da t '4294967295' - dat is MAXUINT(0xFFFFFFFF) ofwel, als integer, -1. De rest van de 512 bytes (Buflen) is #00....

    Benader ik de server via een browser met dezelfde URL over poort 443, is er niets aan de hand: geen foutmelding, en response is wat ik verwacht (datum en tijd in SIO formaat (bv. 2020-08-19T14:44:26+0200)

    Het lijkt erop dat er helemaal geen connectie wordt opgebouwd, de vraag is of het script wel opgebouwd wordt.

    Wat mis ik hier?

  2. #2
    Waar loopt het precies mis in je code?
    Heb je op reqstat en dwError gecheckt voordat je HttpQueryInfo doet? (welke waarde hebben die?)

    Want ik zie in je code dat je na het eventueel falen van HttpSendRequestA gewoon doordendert.

  3. #3
    In beide gevallen is reqstat true, dan geen getlasterror. Dan dus de buffer uitlezen. In geval van poort 80 levert dat een buffer van op met status '200'. In geval van poort 443 die - 1.
    Wel een opmerking: het maakt uit onder welke Windows / Delphi versie, bleek later. Met Delphi 2007 onder XP is het wat aangegeven, met Delphi Rio onder Windows 10 is het wat anders (niet bij de hand). Wel constant

  4. #4
    Moet er geen INTERNET_FLAG_SECURE opgegeven worden bij de HttpOpenRequest als je https wilt?

    Dit omdat je waarschijnlijk geen http:// meegeeft en alleen een poort.
    Met https in de url wordt het ssl wel herkend maar zonder (en alleen poort 443) weet ie niet dat je ssl moet doen. INTERNET_FLAG_SECURE fixt dat.

  5. #5
    Stom. Elders (wat altijd https is geweest) staat die er wel bij....Toegevoegd, maar nog steeds gaat het fout.

  6. #6
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Voor 'kleine' requests zoals deze gebruik ik al een hele tijd een import van MSXML2_TLB.pas en het ServerXMLHTTP object.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •