Heim  >  Artikel  >  Backend-Entwicklung  >  Detailliertes Beispiel, wie man die Anmeldung in Python simuliert und Cookies behält

Detailliertes Beispiel, wie man die Anmeldung in Python simuliert und Cookies behält

Y2J
Y2JOriginal
2017-05-02 15:05:051557Durchsuche

Ich glaube, die simulierte Anmeldung ist jedem bekannt. Der folgende Artikel führt Sie hauptsächlich in die Methode der simulierten Python-Anmeldung und der Aufbewahrung von Cookies ein Schauen Sie sich das unten zusammen an.

Vorwort

Ich habe kürzlich die Daten von Nosec.org gecrawlt und festgestellt, dass ich die Anmeldung simulieren muss, um das Cookie zu erhalten, bevor ich darauf zugreifen kann die Daten, die ich erfassen möchte. Wichtig: Im Anmeldeseitenformular von Nosec.org gibt es ein Feld „authentication_token“, das bei jedem Besuch der Anmeldeseite automatisch generiert und wie Ihr Benutzername und Ihr Passwort an den Server gesendet wird.

Nach einigen Recherchen haben wir festgestellt, dass der Antwortheader des Servers beim direkten Zugriff auf die Anmeldeschnittstelle der Website ein Set-Cookie-Feld wie folgt enthält:

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

Und das Seitenformular Das Formular verfügt über eine Eingabe von „authentication_token“. Der Inhalt lautet wie folgt:

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

Zuvor wurde der Wert von _nosec_session gemäß der Back-End-Logik analysiert, entschlüsselt und mithilfe verschiedener xx-Techniken abgerufen Ich habe den Wert von „authentication_token“ gelesen und dann einfach zusammen mit dem Benutzernamen und dem Passwort gepostet und schließlich herausgefunden, dass das wirklich ein Idiot ist! ! Ich denke immer über Probleme mit dem Backend-Denken nach und kann in letzter Zeit nicht einmal gut laufen. Holen Sie sich also einfach den generierten Authenticity_token-Wert direkt von der Seite und folgen Sie dann dem POST.

Die Verwendung der Session() -Methode der Anforderungsbibliothek ist wirklich einfach zu verwenden. Sie ist viel bequemer als die direkte Verwendung von cookielib in den frühen Tagen.

Code

Die Anmeldemethode der Klasse XXX wird zur Simulation der Anmeldung verwendet, daher werde ich diesen Teil des Anmeldecodes veröffentlichen.

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

Nachdem Sie die Anmeldemethode aufgerufen haben, wird das Cookie eingefügt, wenn Sie das nächste Mal direkt self.s.get() verwenden, um eine Webseite anzufordern.

Die Idee hat mich schon einmal getäuscht, und ich wurde auch von einem Tippfehler (https wurde als http geschrieben) getäuscht, der mich lange Zeit verrückt machen ließ, bevor ich diesen „BUG“ entdeckte " = =, also muss ich dem Code für die Verbesserung danken. Die Effizienz der Fehlerbehebung beträgt 2333!

Zusammenfassung

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel, wie man die Anmeldung in Python simuliert und Cookies behält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn