Python w/ requests - logowanie na stronę

0

Cześć, uczę się pisania requestów. Próbuję zalogować się do strony zalando-lounge. Cały czas dostaję error 403. Wszystkie headersy są dodane, nie wiem w czym leży problem.

Mój kod:

import requests
import re
from bs4 import BeautifulSoup
 
session = requests.Session()
 
login_data = {
   'email':'[email protected]',
   'password':'mypasswordexample',
   'onlyLogin':'true'
}
 
mainPage = 'https://www.zalando-lounge.pl/#/login'
loginPage = 'https://www.zalando-lounge.pl/onboarding-api/login'
productPage = 'https://www.zalando-lounge.pl/campaigns/ZZO124A/categories/136197597/articles/ZZLNME013-Q00'
 
 
main_page = session.get(mainPage)
print(main_page.status_code)
cookie = session.cookies.get_dict()
cookie = re.sub("'", '', str(cookie))
cookie = re.sub(": ", "=", cookie)
cookie = re.sub(",",";", cookie)
cookie = re.sub("{", "", cookie)
cookie = re.sub("}", "", cookie
cookie = cookie+"; G_ENABLED_IDPS=google"
print(cookie)
 
headers = {
    'authority': 'www.zalando-lounge.pl',
    'path': '/onboarding-api/login',
    'scheme': 'https',
    'accept': '*/*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7',
    'content-length': '83',
    'content-type': 'application/json',
    'cookie': cookie,
    'origin': 'https://www.zalando-lounge.pl',
    'referer': 'https://www.zalando-lounge.pl/',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
 
login_process = session.post(loginPage, data=login_data, headers=headers)
print(login_process.status_code)
print(session.cookies.get_dict())
 
product_page = session.get(productPage, headers=headers)
source_code = product_page.content
soup = BeautifulSoup(source_code, "html.parser")
xd = soup.find_all("span")
print(xd)

Przykładowy plik cookie, który wychodzi z mojego skryptu:

Zalando-Client-Id=67a554d4-6e24-4add-9537-2a0126c23aff; _abck=2707BF125938F7009191BAB069D39FFE~-1~YAAQNb17XMn+w7F0AQAAZ7WMsgQm+rbBeYpB3zcMq4l/hfZv58CeR4gKnKRf0hKQNVa7x7GNVrlhGoXrOiQ/bQ4CT9zfsp0MR0KLEZ9ZF56qhNzK7HBu8yfYbLkGB73COwUPpErpArOQtcSRNBLj06LBXBm6zhG+o4oAnQIiJstmMTNH8LXXZMxfXi+CjKQfVmYl/VF7JRyfz2x/f4ZrJ9NVRiH1Y9KN7sQo5wu9dJb4g/TsNIWARmfiKWKQP15xVXP8ymnedUTc2YhILmRmJdWyc+5QH7qMt1yzYpmY4iVz/Svm/MEoVxaSU4RUJocd1g==~-1~-1~-1; bm_sz=20B9BCDB198389EC02111957222E7E46~YAAQNb17XMj+w7F0AQAAZ7WMsgljGBLIRyR4lwG8R3FdEv3aJiK/dXikpp4MEw5B9j1UJBw7ZQ0fUnibdCbiSwIBXiOLKmKv9shq9uad3qm8WISRq+K1JqcS6KLzKEF8Wdwt48CaeE/kLaUnG0IVQXtfcr4pTuAWtgBpvidZfkRxOiV0gFTBopqPN9E2MgnNvotBGmx6Vg==; frsx=AAEAACY1shlbU3xPQ-ZOqAl1rdpCFsRcDGs0DShk4y0q--8KEeR4tsHG-b1Kedj8K6aRvugNyUZkeJnaho_NSI0iLlbCWWbr34AvyT-05JCY3v5oLJu39aTQO5RdmYSBZ0Lda7PgHUak9DeLqTWbP27iPxbBY3QQf3GD1vxfXfGE64d6Bcp2wqk1DnVsERFrWRF0SChCzt_6G0scIdsonOw=; zl_acquire_modal_version=v2; zl_webview_appversion=; zl_webview_ga_cid=; zl_webview_ga_tid=; zl_webviewos=; G_ENABLED_IDPS=google

I tutaj jeszcze nagłówki, które widać przy logowaniu przez przeglądarkową wersję strony:
https://i.stack.imgur.com/NxzfP.png

Co robię nie tak? Proszę o pomoc

0

Może być, że któreś cookie jest źle ustawione, ale jeszcze 500 innych powodów. Pewnie tylko twórcy logowania w Zalando wiedzą jak to zrobić.

0

Obawiam się ze musisz eksportować ten request z przeglądarki, sprawdzić czy nadal działa z jakiegoś curla a potem przepisać go 1:1 do pythona

0

Session automatycznie dołącza cookiesy do zapytania. Niepotrzebnie je załączasz w headersach.

0
tsz napisał(a):

Session automatycznie dołącza cookiesy do zapytania. Niepotrzebnie je załączasz w headersach.

Bez tego też nie działa

0
Shalom napisał(a):

Obawiam się ze musisz eksportować ten request z przeglądarki, sprawdzić czy nadal działa z jakiegoś curla a potem przepisać go 1:1 do pythona

Spróbowałem postman'em i "access denied" :/

2

Mozliwe ze zanim dobije sie post to trzeba przechwycic jakiegos cookiesa (oddzielnym requstem). Moze tez brakowac jakiegos headera albo sam payload jest zle sformulowany. Musisz to dokladnie przeanalizowac - linijka po linijce az w koncu wylapiesz oco chodzi :) Swojego czasu duzo bawilem sie w skrypt do automatyzacji stron i uwierz mi, ze diable tkwi w szczegolach - Tych mega oczywistych :)

0

A jesteś pewien ze gdzieś tam nie ma CSRF token jakiegoś? Np. w cookie albo w danych requestu? Mało który serwer ma wystawione POSTy bez CSRF. W takim wypadku musisz zrobić GET do formularza, pobrać token i dodać go do POSTa.

0

Zamiast kopiować jeden request z przeglądarki skopiuj całe flow i tak sprawdź, może są tam jakieś callbacki. Próbowałeś bez user-agenta?

1 użytkowników online, w tym zalogowanych: 0, gości: 1