Не могу получить токен CSRF все время - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь получить токен csrf на странице входа в Spotify.Раньше у меня не было проблем с этим, но, похоже, теперь я могу получить токен только в 50% случаев.Я попробовал этот простой код, который я сделал:

import requests


def Main():

    s = requests.session()
    s.get("https://accounts.spotify.com/en/login/?_locale=en-US&continue=https:%2F%2Fwww.spotify.com%2Fus%2Faccount%2Foverview%2F")
    print(s.cookies)
    print(s.cookies.get_dict())

    try:
        print(s.cookies['csrf_token'])
    except KeyError:
        Main()


Main()

Если вы запустите программу, вы увидите, что CSRF печатается только несколько раз, а все остальное ничего не печатается.Почему запросы могут получить cookie / токен CRSF только иногда и не всегда?У меня никогда не было этой проблемы раньше.

Редактировать: Версия моих запросов 2.21.0

1 Ответ

0 голосов
/ 20 декабря 2018

Причина, по которой вы не получаете csrf_token периодически, потому что вы часто заходите на веб-сайт или получаете доступ к нему без заголовков - сервер считает, что вы можете быть ботом или злоумышленником.Эти причины приведут к ответам сервера 40x или 50x.Таким образом, вы должны добавить заголовки и установить интервал в 1 секунду.

import requests
import time

def Main():
    time.sleep(1)
    with requests.session() as s:
        s.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
            "Accept-Encoding": "gzip, deflate, br"
        }
        resp = s.get("https://accounts.spotify.com/en/login/?_locale=en-US&continue=https:%2F%2Fwww.spotify.com%2Fus%2Faccount%2Foverview%2F")
        print(s.cookies['csrf_token'])

[Main() for _ in range(10)]
...