POST Request (dict)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hey leute,

folgendes Problem:

Wenn ich ein POST request per Python durchführe wie z,B.:

Code: Alles auswählen

session = requests.Session() 

url = "https://www.codechef.com/usrn=Tester&psw=testpasswort"
r = session.post(url)
funktioniert dieses EINWANDFREI.

Möchte ich die Parameter nun mit nem dict übergeben, funktioniert dies leider nicht:

Code: Alles auswählen

login_data = {
'usrn': 'Tester',
'psw': 'testpasswort'
}

with requests.Session() as f:
    h = f.post('https://codechef.com', data=login_data)
    print(h.url)
Mein print Ergebnis schaut wie folgt aus:
Desweiteren schlägt mit dieser Methode mein Login fehl.
Jemand eine Ahnung weshalb bzw. was ich falsch mache?
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Weder das eine noch das andere funktioniert. An was erkennst Du denn, dass etwas funktioniert?

Es gibt zwei Möglichkeiten, Parameter per HTTP zu übergeben, über den Query-String, also per /url?parameter oder per Attachement. Beides kann man per POST auch kombinieren. Es wäre aber komisch, wenn ein POST-Request einen Query-String fordert und nur das.

Aber wie schon geschrieben, beides tut nicht das, was Du denkst was es tut. Beim ersten Versuch kommt noch dazu, dass Du gar keinen Query-String hast, weil das ? fehlt und Du somit garantiert eine Seite aufrufst, die nicht existiert.

Bitte den richtigen Code zeigen, mit dem Ergebnis des Requests und der genauen Beschreibung, was Du erwartest und was im Fehlerfall statt dessen kommt.
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hey,

ich möchte über ein dict meine URL mit den Variablen "befüllen" und damit ein POST-request durchführen.

Code: Alles auswählen

login_data = {
'usrn': 'Tester',
'psw': 'testpasswort'
}

with requests.Session() as f:
    h = f.post('https://codechef.com/?', data=login_data)
Folgend das beispiel dass ich erreichen möchte (Ohne den direkten Link anzugeben, sondern über ein dict)

Code: Alles auswählen

BEISPIEL URL: "https://codechef.com/?usrn=Tester&psw=testpasswort"
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann willst Du nur params statt data benutzen?
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Ja, genau.
Antworten