2017-12-25 15 views
1

Ich versuche, this website kratzen, aber es erfordert eine Anmeldung. Ich habe Schwierigkeiten, mich durch die Verwendung der Anforderungsbibliothek in Python erfolgreich anzumelden.Python-Anfragen, wie auf der Website

Durch das Formular in der HTML, gibt es keine versteckten Werte und beim Abfangen von HTTP-Anfragen in der Konsole enthält die Anmeldung Post Anfrage für Formulare Benutzername: "Benutzername hier" Passwort: "Passwort hier".

Ich habe auch versucht, die Header anzupassen, wie ich gelesen habe, dass einige Server den Zugriff auf Nicht-Browser-Header-Typen verweigern.

Hier sind meine Versuche

import requests 
from fake_useragent import UserAgent 

ua = UserAgent() 
headers = {"User-Agent": str(ua.chrome)} 

payload = {"username": "username", 
      "password": "password" 
      } 

login = requests.get("https://scsctennis.gametime.net/auth", 
headers=headers) 

response = requests.post("https://scsctennis.gametime.net/auth", 
data=payload, cookies=login.cookies, headers=headers) 

print(response.text) 

und auch

import requests 
from fake_useragent import UserAgent 

ua = UserAgent() 
headers = {"User-Agent": str(ua.chrome)} 

payload = {"username": "username", 
      "password": "password" 
      } 

s = requests.session() 
login = s.get("https://scsctennis.gametime.net/auth", headers=headers) 

response = s.post("https://scsctennis.gametime.net/auth", data=payload, 
headers=headers) 

print(response.text) 

Eine Sache, die ich bemerkt habe, nach der Post-Anforderung, wenn ich das Cookie anzuzeigen versuchen - print (Response.Cookies) Es gibt kein Cookie, aber für die get-Anfrage, print (login.cookies) gibt es einen Cookie.

Ich habe gefolgt und durchgelesen this blog und die requests documentation, und durch viele stackoverflow Pfosten gegangen. Jede Hilfe wäre dankbar, danke.

Bearbeiten Sie haben Recht, es postet zu "https://scsctennis.gametime.net/auth/json-index" Hier ist Code mit Empfehlungen geändert.

import requests 

# headers = {'x-requested-with': 'XMLHttpRequest'} 
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF- 
8"} 

payload = {"username": "username", 
      "password": "password" 
      } 

s = requests.session() 
login = s.get("https://scsctennis.gametime.net/auth/json-index", 
headers=headers) 
print(login.text) 
response = s.post("https://scsctennis.gametime.net/auth/json-index", 
data=payload, headers=headers) 
print(response.text) 

Die Antwort der jeweiligen Print-Anweisung:

{ "Code": 505, "msg": ". Der Benutzername oder Passwort wurde nicht erkannt Überprüfen Sie bitte die Schreibweise und versuchen Sie es erneut"}

{"code": 202, "msg": "Der Benutzername oder das Passwort wurde nicht erkannt. Bitte überprüfen Sie die Schreibweise und versuchen Sie es erneut.", "IsStaff": false, "user": {"name": "Vuk "}}

Ich erhalte die Nachricht 505, indem ich einfach die URL besuche und nicht auf sie poste.

202 Nachricht ist, wenn ich auf die URL posten, aber der Benutzername/das Passwort sind korrekt, aber es sagt, sie sind falsch. Nicht sicher warum? Die Antwort "isStaff": false, "user": {"name": "Vuk"} ist korrekt, da dies mein Name ist, der mit den versuchten Anmeldedaten verknüpft ist, und ich bin kein Mitarbeiter.

Irgendwelche Gedanken zum weiteren Vorgehen?

Letzte Änderung: Erfolgreich verstanden. Danke, dass du mich nicht zur korrekten URL gefunden hast! Es stellt sich heraus, dass die obige Nachricht 202 erfolgreich ist. Es erkennt meinen Namen als zu den Anmeldeinformationen gehörend, aber sie wählen einfach aus, welche Nachricht angezeigt wird. Nach der Post-Anfrage, wenn ich eine Get-Anfrage auf meine gewünschte Seite verwende, erhalte ich eine gute Antwort. Vielen Dank!

import requests 


payload = {"username": "username", 
      "password": "password" 
      } 

s = requests.session() 

response = s.post("https://scsctennis.gametime.net/auth/json-index", 
data=payload) 
print(response.text) 
stuff = s.get("http://scsctennis.gametime.net/scheduling/index/jsoncourtdata/sport/1/date/2017-12-25")` 

print(stuff.text) 
+0

Verwendung 'requests.Session()' und Sie müssen sich keine Gedanken über Cookies kümmern. Er sendet Daten als AJAX-Anfrage an verschiedene URLs (siehe 'DevTool' in' Chrome/Firefox' im Reiter 'Netzwerk-> XHR'). Möglicherweise müssen Sie das Gleiche tun. Es kann Header benötigen: ''x-requested-with': 'XMLHttpRequest'' – furas

+1

Was passiert, wenn Sie' post requests' (skipping get requests) zusammen mit dem Hinzufügen von user-agent zum Header-Parameter direkt senden? Übrigens, lass dich nicht verwirren. Ich spreche von Ihrem aktualisierten Skript, das an der letzten Position sichtbar ist. – SIM

Antwort

0

Ich sehe die Form Beiträge Anmeldeinformationen „https://scsctennis.gametime.net/auth/json-index“ an und die json als Antwort bekommen.

Können Sie diesen Endpunkt anstelle des von Ihnen geposteten Endpunkts posten?

Posting gefälschte Anmeldeinformationen zu diesem Endpunkt:

curl "https://scsctennis.gametime.net/auth/json-index" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Cookie: gametime=ba3725642c5b55fe1123dec46e45e3a7" --data "username=test&passwo 
rd=test" 

kehrt Fehler wie {"code":505,"msg":"The username or password was not recognized. Please check the spelling and try again."}

+0

Danke, gut fangen an, wo sein Beitrag zu. Ich habe ein Update gepostet! @furas – theDust