Logowanie przez python request

Odpowiedz Nowy wątek
2018-08-21 10:28

Rejestracja: 5 lat temu

Ostatnio: 1 rok temu

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:

_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.

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.

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?

Pozostało 580 znaków

2018-08-21 10:47

Rejestracja: 3 lata temu

Ostatnio: 3 godziny temu

Biblioteka RoboBrowser <- google

edytowany 1x, ostatnio: stivens, 2018-08-21 10:49

Pozostało 580 znaków

2018-08-21 11:11

Rejestracja: 5 lat temu

Ostatnio: 1 rok temu

0
stivens napisał(a):

Biblioteka RoboBrowser <- google

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

Pozostało 580 znaków

Odpowiedz

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