2017-05-03 2 views
0

Ich versuche, Python Post-Anforderung zu verwenden, um die Auffrischung eines summoner Profil in OP.GG zu automatisieren:Python Post-Anforderung 418 Fehler

Auf der Seite gibt es einen Knopf, der die folgende JavaScript-Datei aufruft: https://opgg-static.akamaized.net/js3/summoner.js?1492755586

Navigation zu dieser URL: https://na.op.gg/summoner/userName=hamski

die Folge Code-snippet in Chrome Konsole Lauf funktioniert perfekt. Das Profil wurde wie erwartet aktualisiert.

$.OP.GG.ajax.getJSON({ 
    url: ('/summoner/ajax/renew.json/'), 
    method: 'post', 
    data: { 
     summonerId: 47220368 
    }, 
    callback: { 
     onJSON: function(json){ 
      console.log(json) 
     }, 
     onError: function(error){ 
      $.OP.GG.summoner.renewBtn.stop(btn); 
      alert(error); 
     } 
    } 
}); 

Ich habe einen Beitrag Anfrage

import json 
import requests 

url = "https://na.op.gg/summoner/ajax/renew.json/" 

payload = { 
    'summonerId': 47220368, 
} 

data=json.dumps(payload) 

print data 

r = requests.post(url, data) 

print r 
print r.status_code 
print r.text 

Das Ergebnis war ein 418-Fehler die Anfragen Modul.

<Response [418]> 418

R.TEXT gibt mir im Grunde die HTML dieser Seite: https://na.op.gg/summoner/ajax/renew.json/


Aktualisiert Code:

import json 
import requests 
from fake_useragent import UserAgent 

ua = UserAgent(cache=False) 


url = "https://na.op.gg/summoner/ajax/renew.json/" 

payload = { 
    'summonerId': 47220368, 
} 

headers = requests.utils.default_headers() 
headers.update(
{ 
    'User-Agent':ua.random 
}) 

print ua.random 

session = requests.Session() 
r1 = session.get("https://na.op.gg/summoner/userName=hamski",headers=headers) 
print session.cookies.get_dict() 

r = requests.post(url, data=json.dumps(payload),cookies=r1.cookies, headers=headers) 

print r 
print r.status_code 
print r.text 
+0

Sie haben mit einer Teekanne gesprochen. Fehlercode 418 "Ich bin eine Teekanne" war ein Aprilscherzwitz. Es scheint, dass die Entwickler etwas Humor hatten. Ihr Problem sollte von der Tatsache herrühren, dass der Browser bereits authentifiziert ist und die Python-Anfrage nicht. Überprüfen Sie die Netzwerkregisterkarte der Browserkonsole, um festzustellen, ob irgendetwas in der Anfrage sie authentifizieren kann. –

+0

Noch nicht sicher, was das Problem ist. Können Sie näher erläutern, was Sie meinen, indem Sie die Registerkarte Netzwerk überprüfen? Ich fügte einen Zufallsbenutzeragenten dem Header mit Standardheadern hinzu. Ich habe auch Cookies von einer vorherigen Sitzung abgerufen und diese auch in der Postanforderung hinzugefügt. Das Ausführen des Codes führt zu demselben Ergebnis. Ich danke dir sehr! – zhivago

Antwort

0

ich war in der Lage, um herauszufinden, was in fehlte meine Anfrage mit einem Anfrage Interzeptor - Chrome-Erweiterung namens "Postbote"

Es stellte sich heraus, dass die Cookies und Header überhaupt keine Rolle spielten.

Ersetzen von Daten = Json.dumps (Nutzlast) mit Daten = Nutzlast behoben das Problem.

Verwandte Themen