Python парсинг - Проблема с сессионным cookie - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь очистить данные графика нечетной истории с BetBrain.com.

Я могу добиться того, что хочу, используя этот код:

import requests

cookies = {
    'langId': 'en_GB',
    'selectedProviderCountryCode': 'All',
    'oddsFormat': 'EU',
    'bookieNameAndLogo': 'NAME_LOGO',
    'showOddsWithCommission': 'false',
    'gmtTimezoneOffset': '0',
    'JSESSIONID': 'www1~573691318FFBA3BF838F049A885CA507.www1',
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0',
    'Accept': 'application/json',
    'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
    'Prefer': 'safe',
    'Referer': 'https://www.betbrain.com/football/europe/uefa-champions-league/atalanta-bergamo-v-paris-saint-germain-fc/',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://www.betbrain.com',
    'Connection': 'keep-alive',
}

params = (
    ('requestId', '1'),
    ('wsTrack', '7936e07f03c648df810679a0e4090561'),
    ('eventPartId', '3'),
    ('bettingTypeId', '69'),
    ('outcomeId', '109935936221057024'),
    ('bettingOfferId', '109935936463298560'),
    ('eventId', '112059307076505600'),
    ('providerId', '3000920'),
    ('domain', 'www.betbrain.com'),
    ('method', 'get'),
)

response = requests.get('https://newbbfeapi.betbrain.com/oddsHistory', headers=headers, params=params, cookies=cookies)

Однако это неустойчиво, поскольку я использую специфические особенности JSESSIONID Cook ie и wsTrack (я скопировал их значения из своего веб-браузера). Теперь я пытаюсь сгенерировать их непосредственно в Python.

Следуя идее Per Ravn (Python post request завершается неудачно 3 ), мне нужно позвонить в https://newbbfeapi.betbrain.com/httphs?method=get, чтобы получить wsTrack и JSESSIONID .

Заголовок ответа :

HTTP/1.1 200 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
vary: Origin
Access-Control-Allow-Origin: https://www.betbrain.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Access-Control-Allow-Origin,Access-Control-Allow-Credentials
Set-Cookie: JSESSIONID=www1~45B6873B4A07D6FFEF221CEA339B2DA3.www1; Max-Age=57600; Expires=Tue, 04-Aug-2020 02:16:48 GMT; Path=/; Secure; HttpOnly; Secure; HttpOnly; SameSite=None
Content-Type: application/json;charset=UTF-8
Content-Length: 47
Date: Mon, 03 Aug 2020 10:16:47 GMT

Тело ответа :

{"wsTrack": "0bb1e8c939574170819f8d3d2226637f"}

Следовательно, вот мой последний код, который должен был работать, но не работает:

import requests

with requests.Session() as session:
    #First I get the wsTrack and JSESSIONID values

    params = (
        ('method', 'get'),
    )

    postmand = session.get('https://newbbfeapi.betbrain.com/httphs', params=params)
    sessPostRes = postmand.json()
    wsTrack = sessPostRes['wsTrack']
    sessionId = session.cookies['JSESSIONID']
    
cookies = {
    'JSESSIONID': sessionId,
    'langId': 'en_GB',
    'selectedProviderCountryCode': 'All',
    'oddsFormat': 'EU',
    'bookieNameAndLogo': 'NAME_LOGO',
    'showOddsWithCommission': 'false',
    'gmtTimezoneOffset': '0',
}

params = (
    ('requestId', '1'),
    ('wsTrack', wsTrack),
    ('eventPartId', '3'),
    ('bettingTypeId', '35'),
    ('outcomeId', '111805999462014976'),
    ('bettingOfferId', '111948944129405440'),
    ('eventId', '111472476677099520'),
    ('providerId', '3000469'),
    ('domain', 'www.betbrain.com'),
    ('method', 'get'),
)

response = requests.get('https://newbbfeapi.betbrain.com/oddsHistory', params=params, cookies=cookies)
>>> print(response.text) 
ERROR be87f6e1be094521832f6774c2b0200e

У вас есть идеи, как заставить его работать?

Спасибо за вашу помощь!

...