Хочу скачать данные с https://www.rik.parlament.gov.rs/542645/rezultati/
смотрю в браузере сеть, и пытаюсь имитировать те же запросы с теми же параметрами, куками и заголовками
Вот все параметры:
import requests
url = 'https://www.rik.parlament.gov.rs'
common_headers = {
'Host': 'www.rik.parlament.gov.rs',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0',
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'TE': 'trailers',
}
get_headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Upgrade-Insecure-Requests': '1',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
}
post_headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Referer': 'https://www.rik.parlament.gov.rs/',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Origin': 'https://www.rik.parlament.gov.rs',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
}
post_doc_headers = {'Sec-Fetch-Dest': 'document'}
post_empty_headers = {'Sec-Fetch-Dest': 'empty'}
def params2str(data):
return '&'.join(k+'='+v for k,v in data.items())
def content_length(data):
return {'content_length':str(len(params2str(data)))}
def req_load(should_update_pies,type,election_round,region,municipality,election_station):
return {
'should_update_pies':str(should_update_pies),
'type':str(type),
'election_round':str(election_round),
'region':str(region),
'municipality':str(municipality),
'election_station':str(election_station),
}
Инициирую сессию, получаю куки
r0 = requests.get(url+'/542645/rezultati/',headers= common_headers|get_headers)
r0 # <Response [200]>
Запросы /get_results/ всегда заканчиваются удачно
r3 = requests.post(url+'/get_results/',data=req_load(1,2,341140,1,1,0), headers= common_headers|post_headers|post_doc_headers, cookies=r0.cookies.get_dict())
r3 # <Response [200]>, содержательный
А вот запросы /get_regions/ /get-municipalities/ /get-election-stations/ всегда заканчиваются неудачно
param = {'election_type':'2','election_round':'341140'}
r2 = requests.post(url+'/get_regions/', data=param, headers= common_headers|post_headers|post_empty_headers|content_length(param), cookies=r0.cookies.get_dict())
r2 # <Response [403]>
И с добавлением content_length
и без него