Logowanie przez python request

Logowanie przez python request
UN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 56
0

Cześć zacząłem się uczyć pythona dla zabawy, i moim projektem do nauki będzie parsowanie popularnych stron z szybkimi okazjami i wrzucanie ich na https://www.pepper.pl/ . Pierwszym co zrobilem było podejrzenie co strona wysyła podczas używania jej. Zauważyłem że podczas loogowania przesyłane są takie dane jak:

Kopiuj
_token: gse5bAi58jnciXdynLu7D7ncXmTg1twChWMjsOFF
source: generic_join_button_header
identity: login
password: password
remember: on

Używając postmana wysłałem te dane dodając jedynie w headerze content-type jako application/x-www-form-urlencoded. I dostałem poprawną odpowiedz jako zwrotke. Jednak gdy wysłałem dokładnie te same dane używając python requests dostaje 404.

Kopiuj
def get_pepper_token():
    url = "https://www.pepper.pl/login/modal/login"
    request = requests.get(url)
    soup = BeautifulSoup(page, features="html.parser")
    return soup.find('input', attrs={'name': '_token'})['value']


def get_login_headers():
    url = "https://www.pepper.pl/login"
    username = 'username'
    password = 'password'
    token = get_pepper_token()

    payload = {
        '_token': token,
        'source': 'generic_join_button_header',
        'identity': username,
        'password': password,
        'remember': 'on'
    }

    headers = {
        'Content-Type': "application/x-www-form-urlencoded"
    }

    response = requests.post(url, payload, headers=headers)

W takim przypadku sprawdziłem co postman dokładnie wysyła do strony, za pomoca konsoli postmana, okazało się że postman dorzuca parę dodatkowych pól, między innymi cookie, które jest tutaj wymagane.

Kopiuj
Request Headers:
    content-type:"application/x-www-form-urlencoded"
    cache-control:"no-cache"
    postman-token:"de74adb5-5e9b-4c98-9a95-bb69bc739270"
    user-agent:"PostmanRuntime/7.2.0"
    accept:"*/*"
    cookie:"__cfduid=d32b701203ce16ee47549cbe5388b3faa1534746292; first_visit=%22bf0e1200-a441-11e8-b92e-6805ca619fd2%22; pepper_session=%2255c4b461a56c37f5c2ce1a7323b44f8d12353e91%22; browser_push_permission_requested=1534748540; remember_afba1956ef54387311fa0b0cd07acd2b=%22100085%7ChX2GS7H3l8QY79HasDcB3scptVyKGDVMJHdz4Ux2ONIih6Rp2VKhU0BpxvzD%22; view_layout_horizontal=%220-1%22; show_my_tab=0; navi=%5B%5D"
    accept-encoding:"gzip, deflate"
    referer:"https://www.pepper.pl/login"

Dodałem zawartosc cookie z postmana do requestu i wszystko przeszło poprawnie. Jednak wrzucenie na sztywno tych wartosci nie wchodzi w gre ponieważ są one specyficzne dla sesji.

I tutaj mam pytanie, zarowno w przeglądarce jak i postmanie te dane są automatycznie generowane/pobierane. Czy macie jakieś pomysły jak odtworzyć ten proces za pomocą kodu?

stivens
  • Rejestracja: dni
  • Ostatnio: dni
2

Biblioteka RoboBrowser <- google

UN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 56
0
stivens napisał(a):

Biblioteka RoboBrowser <- google

Super! świetna sprawa! Python zaczyna mi się podobać

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.