Wpis z mikrobloga

Mam małą zagwozdkę z pythonem i pobieraniem danych ze strony za pomocą "requests".
Mam stronę, na której jest lista przedmiotów. Chciałbym za pomocą pythona odczytać tę listę i zapisać lokalnie w pliku. Korzystając z konsoli developerskiej chrome udało mi się prześledzić jak wygląda komunikacja z serwerem.
Schemat działania jest mniej więcej taki: request (GET) o stronę główną -> odpowiedź ze stroną główną html -> request (POST) o plik json z danymi -> odpowiedź z danymi json.
Po długich walkach udało mi się połączyć ze stroną główną (okazało się, że jest potrzebna autoryzacja), ale przy próbie requestu o plik dostaję odpowiedź z kodem 500.
Czy z tego ubogiego opisu jest ktoś w stanie wyłapać gdzie jest mój błąd? Albo czy wie ktoś jak powinienem przeprowadzić połączenie z tą stroną?
#python #programowanie #webdev
  • 11
@SpacePotato 500 oznacza minej więcej, że błąd jest tylko pośrednio Twój. Bez detali (bo ich nie podałeś) - obastawiałbym, że wysyłasz body albo autoryzację w sposób, którego programista15k wannabe nie obkodował na serwerze - stąd radosne 500.

Btw. po co Ci zapytanie na stronę główną? Wygląda na to, że tam jest coś jak REST - bo masz jsona w odpowiedzi, nie możesz od razu przeskoczyć do POSTa? Czy coś się jeszcze dzieje
@opalczynski: Przyznam się, że nie wiem dokładnie jak się takie rzeczy robi, więc stwierdziłem, że najlepiej będzie spróbować odtworzyć sposób w jaki przeglądarka się dogaduje z serwerem, stąd najpierw zapytanie o stronę główną.

Nie podaję detali, bo to jest stronka w pracy i boję się wrzucić coś czego nie powinienem :P
Czyli rozumiem, że problem może być w moim zapytaniu, tak?
A czy mając taki request jestem w stanie utworzyć identyczny
Pobierz S.....o - @opalczynski: Przyznam się, że nie wiem dokładnie jak się takie rzeczy robi...
źródło: comment_15822736652hZXN4webRy9XuwABnKI5o.jpg
@SpacePotato jak najbardziej. Jak to wewnętrzna rzeczy - nie masz dostępów do logów? Czemu w ogóle ta 500 się pojawiła w pierwszej kolejności? Problem może być w kilku miejscach, ale za najbardziej prawdopodobne - jak już mówiłem - jest to, że serwer nie parsuje poprawnie Twojego body, albo parsuje poprawnie, a nie zgadzają mu się dane w środku.
A czy mając taki request jestem w stanie utworzyć identyczny w skrypcie?


@SpacePotato: tak, ale musisz przesłać dane z kluczem autoryzacyjnym pobrane podczas logowania.
1. Wyslij post do endpointu logowania. Zachowaj klucz/ciastko
2. Wyślij post do zabezpieczonego endpointu sutawiając odpowiednie headery.

Możesz najpierw spróbować wysłać reqest z headerami dokładnie takimi jak widzisz w przeglądarce.

REST - bo masz jsona w odpowiedzi


@opalczynski: REST dotyczy interakcji z interfejsem API, a nie
@SpacePotato: Z doświadczenia powiem, że na 99% potrzebujesz X-Requestes-With oraz user-agent udający przeglądarkę i to może być powodem. Jeżeli dalej nie działa, a dane które wysyłasz są identycznie sformatowane to najpewniej trzeba dodać referer ale jakby to sprawdzali to raczej wywalałoby brak dostępu.
@SpacePotato: ciasteczko oczywiście też potrzebujesz ale generuj je sam (logowanie przez requests) bo jak dodasz na sztywno z przeglądarki to się najpewniej wysypie bo zauważy inny user-agent lub coś takiego.

Generalnie udajesz najbardziej jak możesz, nawet w sytuacji kiedy wszystko jest zwracane poprawnie bo to nie znaczy, że po swojej stronie nie widzą anomalii ;-).