2015-07-22 10 views
9

Próbuję zalogować się do strony i uzyskać dostęp do innego łącza na tej stronie.Korzystanie z plików cookie w pytaniach w języku Python

payload={'username'=<username>,'password'=<password>} 
with session() as s: 
    r = c.post(<URL>, data=payload) 
    print r 
    print r.content 

To daje mi błąd "405 Nie dozwolone". Sprawdziłem szczegóły metody wpisu za pomocą narzędzi programistycznych Chrome i mogłem zobaczyć api (URL/api/auth). Opublikowaliśmy ten adres URL z ładunkiem i działało, a ja otrzymywałem odpowiedź podobną do tej, którą widziałem w programie dla programistów.

Niestety, podczas próby "uzyskania" innego adresu URL po zalogowaniu, nadal otrzymuję treść ze strony logowania. Dlaczego dane logowania nie są widoczne? Czy mogę używać plików cookie? Jestem nowicjuszem, więc nie wiem jak pracować z ciasteczkami.

Odpowiedz

6

Z documentation:

  1. get Cookie z odpowiedzią

    url = 'http://example.com/some/cookie/setting/url' 
    r = requests.get(url) 
    r.cookies 
    

    {'example_cookie_name': 'example_cookie_value'}

  2. dać ciastko z powrotem do serwera, na późniejsze żądanie

    url = 'http://httpbin.org/cookies' 
    cookies = dict(cookies_are='working') 
    r = requests.get(url, cookies=cookies)` 
    
+0

Dzięki. Właściwie wydaje się, że nie ma plików cookie, które można utworzyć. Sprawdziłem nagłówki żądań i nie widziałem żadnych "ciasteczek". Tymczasem w nagłówkach odpowiedzi znajduje się jeden plik cookie. W jaki sposób mogę utworzyć swój plik logowania, jeśli nie ma pliku cookie? – user1474157

+0

Normalny przepływ dla pliku cookie uwierzytelniającego to: (1) po przesłaniu formularza logowania otrzymasz plik cookie w nagłówkach odpowiedzi. (2) przy kolejnych żądaniach strony dodajesz plik cookie do nagłówków żądań. –

14

Można użyć obiektu sesji. Przechowuje pliki cookies, aby można było prośby, i obsługuje pliki cookie dla ciebie

s = requests.Session() 
# all cookies received will be stored in the session object 

s.post('http://www...',data=payload) 
s.get('http://www...') 

Docs: http://docs.python-requests.org/en/latest/user/advanced/

Można również zapisać dane plików cookie do pliku zewnętrznego, a następnie załaduj je do utrzymania sesji trwałe bez konieczności logowania za każdym razem po uruchomieniu skryptu:

How to save requests (python) cookies to a file?

Powiązane problemy