Maison  >  Article  >  développement back-end  >  Exemple détaillé de la façon de simuler la connexion en python et de conserver les cookies

Exemple détaillé de la façon de simuler la connexion en python et de conserver les cookies

Y2J
Y2Joriginal
2017-05-02 15:05:051600parcourir

Je pense que la connexion simulée est familière à tout le monde. L'article suivant vous présente principalement la méthode de connexion simulée en python et de conservation des cookies. L'introduction dans l'article est très détaillée et a une certaine valeur de référence pour tous les amis qui en ont besoin. jetez un œil ensemble ci-dessous.

Avant-propos

J'étais en train d'explorer les données de nosec.org récemment. J'ai vu que je devais simuler la connexion pour obtenir le cookie avant de pouvoir accéder au. données que je souhaite capturer. Important Il y a un champ d'authentification_token dans le formulaire de la page de connexion de nosec.org, qui sera automatiquement généré chaque fois que vous visitez la page de connexion, et sera POSTÉ sur le serveur comme votre nom d'utilisateur et votre mot de passe.

Après quelques recherches, nous avons constaté que lors de l'accès direct à l'interface de connexion du site Web, l'en-tête de réponse du serveur aura un champ Set-Cookie, comme suit :

_nosec_session=ZTlHNmxuZXE4R0s1UXpsVUxGRTNPblNBWFd2TXU4TU9aNWVJM2lyLzNFY0pLeUdNMDY1cmZqanpkc0ppaGtjU
i9kTGdWenBrNXJKenNqbnN2YUxucE1DRW5UMHNTR1RxWDZPeGlLazllTmY1czVpYWplazJXdWkvZS9wUHJpc1Jya3ZzcmNVMytPR
it2T1dEcGx4bHNDTTVzSmVTb0xhSjRycE03QUl5RXE5Z2tZWG1mTHFBWGx1QW52QjBURi8rLS1acE8yeVRtMFRZR1JWdExneStwdmpRPT0
%3D--a6ccd9a12a8af5c8b5fb6625c24bb4db0398c503; path=/; HttpOnly

Et le formulaire de page Le formulaire a une entrée d'authentification_token, le contenu est le suivant :

<input type="hidden" name="authenticity_token" value="cGdhqVxDMRndpKbpvIV66wfEQlGf4Rz6UtXqsf79brEvFveHw2rCc6uz3euFEyUlpuA0azt5uNhnmrUiCaAyUg==" />

Auparavant, la valeur de _nosec_session était analysée selon la logique back-end, décryptée et diverses techniques xx étaient utilisées pour obtenir la valeur de Authentication_token, puis publiez-le avec le nom d'utilisateur et le mot de passe, et découvrez finalement que c'est vraiment un idiot capital ! ! J'utilise toujours la réflexion back-end pour réfléchir aux problèmes, et je ne peux même pas bien marcher récemment. Alors, récupérez simplement la valeur d'authenticité_token générée directement à partir de la page, puis suivez le POST.

Utiliser la méthode Session() de la bibliothèque de requêtes est vraiment simple à utiliser C'est beaucoup plus pratique que d'utiliser directement cookielib au début.

Code

La méthode de connexion de la classe XXX est utilisée pour simuler la connexion, je publierai donc cette partie du code de connexion.

class XXX:
 def login(self):

  r = self.s.get(&#39;https://nosec.org/users/sign_in&#39;)
  html = r.text
  p1 = re.compile(r&#39;city_token" value="(.*?)"&#39;)
  res = re.search(p1,html)
  authenticity_token = str(res.group(1))
  print &#39;authenticity_token:&#39;,authenticity_token
  # print &#39;cookies&#39;,self.s.cookies
  # print s.cookies
  data = {
   &#39;authenticity_token&#39;:authenticity_token,
   &#39;user[login]&#39;:&#39;xxxxx&#39;,
   &#39;user[password]&#39;:&#39;xxxxx&#39;
  }
  r = self.s.post(&#39;https://nosec.org/users/sign_in&#39;,data=data)
  # print r.headers
  # print r.request.headers
  # print self.s.cookies
  print &#39;[*] OK!&#39;
  return True

Après avoir appelé la méthode de connexion, la prochaine fois que vous utiliserez directement self.s.get() pour demander une page Web, le cookie sera inclus.

J'ai été trompé par l'idée une fois auparavant, et j'ai aussi été trompé par une faute de frappe (https s'écrivait comme http), ce qui m'a rendu fou pendant longtemps avant de découvrir ce "BUG " = =, je dois donc remercier le code pour l'amélioration. L'efficacité du dépannage des bugs est de 2333 !

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn