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>
Enfin, j'ai ce code: p> 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
3 Réponses :
Vous pouvez également attribuer 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. P>
N'oubliez pas d'attribuer un fidhttp.handlerdirects: = true code> il commence donc automatiquement les redirections. P>
fidhttp.redirectMaximum code> est utilisé pour définir le nombre de redirections successives doivent être traitées. P>
fidhttp.onredirect code> et définir
manipulé: = true code> 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). P>
À propos de la réponse HTTP h2>
Autres suggestions h2>
CookIeManager CODE> et assurez-vous d'utiliser le même
CookIeManager code> pour toutes les demandes suivantes. Si vous ne le faites pas, vous serez probablement redirigé vers la page de connexion encore et encore. P>
[(* À propos de la réponse HTTP Rien de mal à cette réponse, c'est un redirect très basique à chiffré.google.com a >. Tidhttp devrait aller à la page donnée en réponse. Il définit également des cookies. *) Pouvez-vous me dire comment IDHTTP devrait aller à cette page donnée?
Tidhtp gère 302 messages d'état automatiquement et charge la nouvelle page automatiquement si vous définissez des gestionnaires = true.
J'ai fait tout ce que vous dites ci-dessus. Cependant, toujours pas de joie. Il s'arrête à une redirection et ne se poursuit pas (comme c'est visible des en-têtes de demande dans le violon. - Quel (code ou paramètre de propriété) est requis pour rendre IDHTTP continuer à suivre jusqu'à la dernière page? c'est à dire. Que dois-je faire pour obtenir IDHTTP d'agir comme un navigateur Web? (Dans mon cas, j'ai besoin d'accéder à la page de connexion AdSense; si déjà connecté à Adsense, il s'agit de la page d'accueil AdSense que j'ai besoin de télécharger)
Veuillez afficher la réponse HTTP finale que Tidhttp reçoit avant de cesser de suivre les redirections. Soit Google cesse d'envoyer des redirections ou d'envoyer une réponse que Tidhttp ne peut pas gérer.
@REMY: Code et Réponse / Demander des en-têtes postés comme une réponse.
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;
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 i> voir ou est-ce simplement la dernière redirection? Mettez un point de frein dans iDhttp1redirect, est-ce que cela s'arrête jamais?
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;
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.