Automatyzacja żądań internetowych za pomocą curl?


13

Mam kilka „korporacyjnych” systemów, z których muszę korzystać w pracy. Niektóre z nich są okropne, z ramkami, wyskakującymi oknami i tym podobne.

Myślałem o zautomatyzowaniu niektórych rzeczy za pomocą curl lub czegoś takiego. Potrzebuję się zalogować, kliknąć hiperłącza, ustawić trochę danych, a oni piszą.

Czy można używać loków? A może lepiej będę używać czegoś takiego jak Selenium?


1
Używałbym do tego zope.testbrowser Pythona .
phunehehe

2
Czy musisz umieć obsługiwać JavaScript?
intuicyjnie


2
Korzystanie z sesji jest po prostu wysyłaniem identyfikatora sesji przy każdym żądaniu. W pliku cookie lub w parametrze GET. wgeti curlmoże korzystać z pliku cookie Netscape, więc jeśli Twoja przeglądarka również go używa, może to wystarczyć, aby po prostu określić go w downloaderze. Jakiej przeglądarki używasz?
manatwork

2
Nie ma szczęścia do prostego rozwiązania z nimi. Firefox i Chrome używają SQLite, Opera ma format plików binarnych. Wygląda na to, że będziesz musiał wyszukać identyfikator sesji i przekazać go ręcznie do downloadera.
manatwork,

Odpowiedzi:


13

Tak, jest to w pełni możliwe przy zwijaniu. Najważniejsze będzie zapisywanie i ponowne ładowanie plików cookie między użytkami curl --cookie-jar. W razie potrzeby możesz także publikować dane formularza. Zwykle używam dodatku Firefox o nazwie Live HTTP Headers, aby rejestrować, co się dzieje, gdy nawiguję po stronie internetowej. Będzie nagrywać wszystkie nagłówki, ale także wszelkie posty z formularzy, co jest bardzo pomocne, gdy próbujesz dowiedzieć się, co zrobić z curl. Napisałem skrypty bash automatyzujące różne wywołania curl i używam potoków i plików tymczasowych (dzięki uprzejmości mktemp), aby wykonać pewne ograniczone przetwarzanie na stronie internetowej, ale jeśli muszę wykonać dużo przetwarzania strony, zwykle przełączam się na Perl z LibWWW.


Oprócz nagłówków HTTP Live Firefox zarówno Safari, jak i Chrome mogą wyświetlać nagłówki z podziałem na obiekty w Inspektorze sieci.
bahamat

15

W prostych przypadkach pobierania zawartości strony użyj curl lub wget . Oba są narzędziami wiersza poleceń zaprojektowanymi do pobierania plików przez HTTP i mają wiele opcji. W twoim przypadku prawdopodobnie będziesz musiał sprawić, by te narzędzia wyglądały bardziej jak przeglądarka; Odpowiedź lutzky'ego i odpowiedź pingwina359 wspominają niektóre opcje curl i wget, które są przydatne w tym względzie.

Czasami, gdy musisz się zalogować , znacznie łatwiej jest najpierw zalogować się ręcznie w przeglądarce internetowej, a następnie wyeksportować pliki cookie przeglądarki internetowej (rozszerzenia takie jak ciasteczka lub Eksportuj pliki cookie dla przeglądarki Firefox mogą pomóc).

Jeśli musisz przeanalizować zawartość niektórych stron lub formularzy postów , możesz potrzebować bardziej wyszukanych narzędzi niż curl i wget. Niektóre dobre narzędzia to Perl z LWP(libwww) i HTML::TreeBuilder(HTML-Tree) lub Python ze standardowymi bibliotekami (szczególnie httplibihtmllib ).

W przypadku bardziej złożonych interakcji z witryną referencyjną jest strona WWW Perla :: Mechanize . Ta biblioteka Perla definiuje funkcje wysokiego poziomu do interakcji ze stroną internetową, podobnie jak przeglądarka internetowa, w tym POSTing, formularze, pliki cookie, ale nie Javascript. Jeśli Perl nie jest twoją filiżanką herbaty, ta biblioteka ma imitacje o podobnych możliwościach w innych językach, takich jak Python mechanize i Ruby Mechanize .

Wreszcie, gdy potrzebujesz Javascript , zwykle stosuje się przeglądarkę internetową, która jest obsługiwana przez platformę automatyzacji przeglądarki. Selen i Watir są popularnymi wyborami; zobacz także Czy są jakieś dobre narzędzia oprócz SeleniumRC, które mogą pobierać strony internetowe, w tym treści pomalowane JavaScriptem?


6

Moim ulubionym jest wget, dlatego podam przykład. To, co chcesz zrobić, to replikować sesję przeglądarki tak blisko, jak to możliwe, więc użyj odpowiednich argumentów wiersza polecenia. Te, które są konieczne, zależą od tego, jak dokładnie strona sprawdza przeglądarkę. --referer(sic) jest zwykle wystarczające, ale możesz także potrzebować --user-agenti --load-cookies.

Ta technika polega na fałszowaniu przeglądarki - próbujesz wgetzaprezentować się w witrynie jako przeglądarka. Największym problemem, z którym będziesz musiał się zmierzyć, jest CAPTCHA, którego nie ma w podanej przykładowej witrynie. Upewnij się również, że przestrzegasz zasad dotyczących czasu witryny (w tym przypadku 45 sekund), w przeciwnym razie prawdopodobnie zostaniesz zablokowany.

Prawdopodobnie nie jest możliwe pobranie tego samego pliku w różnych sesjach - strona przyznaje uprawnienia do pobierania określonego pliku do określonej sesji.


Dobra odpowiedź z kompleksowymi uwagami. Dzięki
xiaohan2012
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.