Próbuję pobrać dane z urla dostępnego dla zalogowanego użytkownika - listę przedmiotów dodanych do ulubionych.
Używam do tego Pythona 3 i biblioteki urllib. (pip freeze rzecze, że wersja to urllib3==1.22)
Mój kod:
from urllib.request import urlopen
import json
url = 'https://www.vinted.pl/members/ubrania/favourite_list'
cookie = ("G_ENABLED_IDPS=google; "
"_vinted_pl_session=JakieSCookieKtoreDostajeOdStronki; "
"euconsent=dalejroznedanenanana "
)
useragent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 '
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 ',
'accept-encoding': 'gzip, deflate, br ',
'accept-language': 'pl,en-US;q=0.9,en;q=0.8,de;q=0.7 ',
'cache-control': 'no-cache ',
'cookie': cookie,
'pragma': 'no-cache ',
'referer': 'https://www.vinted.pl/forum ',
'sec-fetch-mode': 'navigate ',
'sec-fetch-site': 'none ',
'sec-fetch-user': '?1 ',
'upgrade-insecure-requests': '1 ',
'User-Agent': useragent }
with urlopen(url, data=bytes(json.dumps(headers), encoding="utf-8")) as response: #tu wywala wyjątek
print(response)
W toku testowania kolejnych wersji i upewniania się, że request wykonywany przez Pythona idealnie odzwierciedla request wychodzący z przeglądarki, ustawiłam każdy możliwy header tak samo. (screen działającego w przeglądarce requesta w załączniku)
Generalnie zakładam, że 403 Forbidden wynika stąd, że portal jakimś sposobem nadal potrafi rozpoznać mój program jako skrypt, a nie przeglądarkę. Cała autoryzacja requestu wydaje się opierać na cookie, który też kopiuję i ustawiam identyczny, jak w przeglądarce. (dbając też o to, by używać zawsze aktualnego cookie, zmieniającego się przy każdym kolejnym requeście - konkretniej, wartość "_vinted_pl_session" pobieram z odpowiedzi ostatnio wykonanego requestu w przeglądarce i wstawiam do programu, to jedyna zmieniająca się wartość w cookie)
Pytanie brzmi, czym w takim razie różni się request z mojego programu od requestu przeglądarki, że skrypt dostaje odpowiedź 403?