wget/curl pobieranie pliku

Masz problemy z siecią bądź internetem? Zapytaj tu
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

[+] wget/curl pobieranie pliku

Post autor: kodama »

Witajcie
Mam do was zapytanie: mam link w postaci

Kod: Zaznacz cały

https://[B][I]jakistamadres[/I][/B]/Download?action=listStandard&tableName=calls&listBeanName=callTrackingListBean&listViewBeanName=&mimeFormat=CSV&encoding=UTF-8&fileName=calls.csv&fieldSep=SEM&textSep=&temObjID=-1&downloadMethod=
plus dane do logowania. Link ów, gdy odpalony w przeglądarce pobiera plik calls.csv. Pytanie moje jest takie - co trzeba porobić, żeby to samo dało się zassać wgetem/curlem? Próbowałem jednemu i drugiemu podawać dane do logowania, ale nic to nie daje, w wyniku dostaję puste pliki o takich nazwach:

Kod: Zaznacz cały

Download?action=listStandard&tableName=calls&listBeanName=callTrackingListBean&listViewBeanName=&mimeFormat=CSV&encoding=UTF-8&fileName=calls.csv&fieldSep=SEM&textSep=&temObjID=-1&downloadMethod=.1
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Nim masz dostęp do tego linka musisz się zalogować? Jeśli tak, możliwe, że strona używa cookie i wykorzystuje je gdy chcesz pobrać plik.
Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

Zgadza się, muszę się zalogować. Też próbowałem z jakimiś cookie-jar'ami ale nic to. Najpewniej po prostu robię coś źle :] Może mógłbyś podpowiedzieć jak powinienem to w prawidłowy sposób wykonać? Tzn. jakąś ogólną zasadę?
Awatar użytkownika
marcin1982
Moderator
Posty: 1730
Rejestracja: 05 maja 2011, 12:59
Lokalizacja: Zagłębie Dąbrowskie

Post autor: marcin1982 »

Awatar użytkownika
kodama
Junior Member
Posty: 633
Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań

Post autor: kodama »

Kolego szukałem szukałem, na forum tutaj piszę zazwyczaj gdy już zupełnie rozłożę ręce i nie mam pomysłu.
Metoda z eksportowaniem ciasteczka z firefoxa wydaje się działać. Pytanie tylko co jest nie tak z wgetowym zapytaniem, bo ciastko z mozilli wygląda tak:

Kod: Zaznacz cały

[B][I]adres[/I][/B].com    FALSE    /pages/    TRUE    0    JSESSIONID    2A21E7D369BD87F184FCEF2143FD7832.sdapp03
[B][I]adres[/I][/B].com    FALSE    /pages/sdcall/    FALSE    0    loginAction    default
[B][I]adres[/I][/B].com    FALSE    /pages/sdcall/    FALSE    0    accessmode    ""
s0.[B][I]adres[/I][/B].com    FALSE    /pages/    TRUE    0    JSESSIONID    3494F583FFD8CBA41BFC4A63A6486157.lb02
A jak wget zapisze ciasteczko to są w nim tylko druga i trzecia linia z tych powyżej, i pewnie dlatego nie działa? Zapytanie do serwera wysyłałem dokładnie według wzoru z twojego drugiego linku.

DODANE
Coś jest jeszcze nie do końca dobrze z moim zapytaniem jeszcze.

Kod: Zaznacz cały

wget --post-data="userName=$user&password=$pass" --cookies=on --keep-session-cookies --save-cookies=cookie.txt "$link"
user i pass są ustawione w pliku, prawidłowe. userName i password to id z pól formularza, $link to linka do tego co jest ustawione w formularzu jako action. W cookie, które otrzymuję brakuje mi (w porównaniu do tego wyeksportowanego z mozilli) tej ostatniej linijki. Jakaś podpowiedź, co jeszcze mógłbym zmienić? Próbowałem ustawiać user-agent, ale nic nie pomogło.

Ech, mój mały rozumek chyba tego nie potrafi ogarnąć, kurde ;] Chociaż przypuszczam, że to pewnie jakaś wielka filozofia nie jest. Nic to, pomęczę jeszcze temat trochę, jakby ktoś zechciał pomóc byłoby miło.

NASTĘPNE DODANE
Hm, logowanie chyba przebiega pomyślnie, bo jestem w stanie pobrać zawartość stron "po" ekranie logowania. Natomiast nie wiem dlaczego nadal nie mogę ściągnąć tego pliku:

Kod: Zaznacz cały

https://[B]adres[/B].com/pages/sdcall/Download?action=listStandard&tableName=calls&listBeanName=callTrackingListBean&listViewBeanName=&mimeFormat=CSV&encoding=UTF-8&fileName=calls.csv&fieldSep=SEM&textSep=&temObjID=-1&downloadMethod=
Jak odpalę wgeta w trybis spider, to dostaję odpowiedź:

Kod: Zaznacz cały

Żądanie HTTP wysłano, oczekiwanie na odpowiedź... 
  HTTP/1.1 200 OK
  Server: nginx
  Date: Tue, 22 Sep 2015 14:06:22 GMT
  Content-Length: 0
  Connection: keep-alive
  Strict-Transport-Security: max-age=15768000
Długość: 0
Zdalny plik istnieje i może zawierać dalsze odnośniki,
jednak rekurencja jest wyłączona -- nie pobieram.


[1]   Zakończono             wget --spider --server-response https://[B]adres[/B].com/pages/sdcall/Download?action=listStandard
[2]   Zakończono             tableName=calls
[3]   Zakończono             listBeanName=callTrackingListBean
[4]   Zakończono             listViewBeanName=
[5]   Zakończono             mimeFormat=CSV
[6]   Zakończono             encoding=UTF-8
[7]   Zakończono             fileName=calls.csv
[8]   Zakończono             fieldSep=SEM
[9]-  Zakończono             textSep=
[10]+  Zakończono             temObjID=-1
Plik na 100% nie ma zerowej długości, jest ok 1,2KB.
Próbowałem nawet wysyłać dokładnie takie żądania jak przeglądarka i nic.

Dobra, wiem co jest nie tak, ale nie wiem jak naprawić. Zaraz po zalogowaniu w odpowiedzi na żądanie POST powinno się pojawić takie Set-Cookie cośtamcośtam z właściwym JSESSIONID. No tyle, że u mnie w tym miejscu się wywala. Tzn. wget próbuje w kółko się łączyć i nie może zakończyć - czyli zapisać tego kukisa.

SUKCES!
Okazało się, że aby to śmignęło, to muszę jakby "przeklikać" curlem (bo na niego jednak się zdecydowałem) wszystkie strony po kolei, prowadzące do końcowego odnośnika. No, ale, kurde działa nareszcie :)
ODPOWIEDZ