9
votes

Indy - IDHTTP Comment gérer les redirections de la page?

Utilisation: Delphi 2010, dernière version de Indy

J'essaie de gratter la page Web de Data Off Off Googles AdSense, dans le but d'obtenir les rapports. Cependant, j'ai été infructueux jusqu'à présent. Il s'arrête après la première demande et ne procède pas. P>

Utilisation de FIDDler pour déboguer le trafic / demande au site Web de Google AdSense et un navigateur Web pour charger la page AdSense, je peux voir que la demande (de la Webbrowser) génère un certain nombre de redirections jusqu'à ce que la page soit chargée. P>

Cependant, mon application Delphi ne génère que quelques demandes avant son arrêt. P>

Voici les étapes que j'ai suivies : p>

  1. Drop A IDHTTP et un composant IDSSLiohandlersocketOpensSL1 sur le formulaire. LI>
  2. Définissez les propriétés des composants IDHTTP AubergeCookies et les personnes handicapées à True et Iohandler Propriété à IDSSLIOHANDLERSOCKEOPENSSL1. LI>
  3. Définissez la méthode IDSSLIOHHANDLERSOCKEOPENSL1 Composant Composant: = 'SSLVSSLV23' LI> ol>

    Enfin, j'ai ce code: p> xxx pré>

    Cependant, il n'arrive pas à la page de connexion comme prévu. Je m'attendrais à ce que cela se comporte comme s'il s'agissait d'un WebBrowser et de procéder à des redirections jusqu'à ce qu'il trouve la page finale. P>

    Il s'agit de la sortie des en-têtes de Fiddler: P>

    HTTP/1.1 302 Found
    Location: https://encrypted.google.com/
    Cache-Control: private
    Content-Type: text/html; charset=UTF-8
    Set-Cookie: PREF=ID=5166063f01b64b03:FF=0:TM=1293571783:LM=1293571783:S=a5OtsOqxu_GiV3d6; expires=Thu, 27-Dec-2012 21:29:43 GMT; path=/; domain=.google.com
    Set-Cookie: NID=42=XFUwZdkyF0TJKmoJjqoGgYNtGyOz-Irvz7ivao2z0--pCBKPpAvCGUeaa5GXLneP41wlpse-yU5UuC57pBfMkv434t7XB1H68ET0ZgVDNEPNmIVEQRVj7AA1Lnvv2Aez; expires=Wed, 29-Jun-2011 21:29:43 GMT; path=/; domain=.google.com; HttpOnly
    Date: Tue, 28 Dec 2010 21:29:43 GMT
    Server: gws
    Content-Length: 226
    X-XSS-Protection: 1; mode=block
    


4 commentaires

Pourquoi n'utilisez-vous pas L'API ?


Pour postuler à l'accès à l'API Google AdSense, vous devez obtenir une vue de 100 000 pages ou plus par jour. Ce site Web ne se qualifie pas, je dois donc faire un grattage manuel de la page.


Peut-être qu'il y a impliqué JavaScript (vous pouvez le désactiver dans le navigateur pour vérifier - si le login fonctionne toujours, cela prouve que j'avais tort)


@MJN: désactivé JavaScript, cache de navigateur effacé et rechargé la page - la page de connexion se charge bien.


3 Réponses :


2
votes

Obtenir des redirections Aller

fidhttp.handlerdirects: = true il commence donc automatiquement les redirections.

fidhttp.redirectMaximum est utilisé pour définir le nombre de redirections successives doivent être traitées.


Vous pouvez également attribuer fidhttp.onredirect et définir manipulé: = true de ce gestionnaire. C'est ce que je fais dans un projet qui doit lire des données d'un site Web Wikimedia (mon propre site).

À propos de la réponse HTTP

rien de mal avec cette réponse, c'est une redirection très basique à https://rencrypted.google.com/. Tidhttp devrait aller à la page donnée en réponse. Il définit également des cookies.

Autres suggestions

N'oubliez pas d'attribuer un CookIeManager et assurez-vous d'utiliser le même CookIeManager pour toutes les demandes suivantes. Si vous ne le faites pas, vous serez probablement redirigé vers la page de connexion encore et encore.



8
votes

Valeurs de la propriété des composants IDHTTP avant de faire appel à l'appel:

  FURL := 'https://www.google.com';

  GetUrlToFile( (FURL + '/adsense/'), 'a.html');




  procedure TfmMain.GetUrlToFile(AURL, AFile : String);
  var
   Output : TMemoryStream;
  begin
    Output := TMemoryStream.Create;
    try
      try
       IdHTTP1.Get(AURL, Output);
       IdHTTP1.Disconnect;
      except

      end;
      Output.SaveToFile(AFile);
    finally
      Output.Free;
    end;
  end;


1 commentaires

Cela appartient à la question initiale (vous pouvez modifier votre question à tout moment de votre choix). Tidhttp traite-t-il des redirections? Est-ce que c'est la première redirection que vous jamais voir ou est-ce simplement la dernière redirection? Mettez un point de frein dans iDhttp1redirect, est-ce que cela s'arrête jamais?



0
votes

Dans mon cas, je devais fixer des devises, car j'avais en quelque sorte; En IT!

procedure Tfrm1.IdHTTP1Redirect(Sender: TObject; var dest: string;
  var NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
var
  i: Integer;
begin

  i := Pos(';', dest);
  if i > 0 then
  begin
    dest := Copy(dest,1, i - 1);
  end;

  Handled := True;
end;


0 commentaires