Próbuję pobrać plik za pomocą wget
i curl
i jest on odrzucany z błędem 403 (zabronione).
Mogę wyświetlić plik za pomocą przeglądarki internetowej na tym samym komputerze.
Próbuję ponownie z klientem przeglądarki, uzyskanym przez http://www.whatsmyuseragent.com . Robię to:
wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
i
curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
ale nadal jest zabronione. Jakie mogą być inne powody dla 403 i w jaki sposób mogę zmienić polecenia wget
i curl
, aby je pokonać?
(nie chodzi o to, że mogę pobrać plik - wiem, że mogę go zapisać w przeglądarce; chodzi o zrozumienie, dlaczego narzędzia wiersza poleceń działają inaczej)
aktualizacja
Dzięki wszystkim doskonałym odpowiedziom udzielonym na to pytanie. Konkretny problem, jaki napotkałem, polegał na tym, że serwer sprawdzał stronę odsyłającą. Dodając to do wiersza poleceń, mógłbym pobrać plik za pomocą curl
i wget
.
Serwer, który sprawdził odsyłającą odesłana przez 302 do innego miejsca, które wykonaliśmy żadnych kontroli w ogóle, a więc curl
albo wget
o tym miejscu pracował równo.
Jeśli ktoś jest zainteresowany, stało się tak, ponieważ czytałem tę stronę, aby dowiedzieć się o wbudowanym CSS i próbowałem spojrzeć na css witryny na przykład. Rzeczywisty adres URL, z którym miałem problem, był taki, a curl
skończyło się na nim
curl -L -H 'Referer: http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
a wget jest
wget --referer='http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css
Bardzo interesujące.
Odpowiedzi:
Żądanie HTTP może zawierać więcej nagłówków, które nie są ustawione przez zawinięcie lub wget. Na przykład:
key=val
, możesz ustawić go za pomocą opcji-b key=val
(lub--cookie key=val
) dlacurl
.curl
Opcja ta jest-e URL
i--referer URL
.curl
pomocą opcji-u user:password
(lub--user user:password
).Mozilla
, nie zawierająWget
lubcurl
).Zwykle można użyć narzędzi programistycznych przeglądarki (Firefox i Chrome obsługują to), aby odczytać nagłówki wysłane przez przeglądarkę. Jeśli połączenie nie jest szyfrowane (tzn. Nie używa HTTPS), możesz również użyć do tego celu sniffera pakietów, takiego jak Wireshark.
Oprócz tych nagłówków strony internetowe mogą również wyzwalać pewne działania za kulisami, które zmieniają stan. Na przykład podczas otwierania strony możliwe jest wykonanie żądania w tle w celu przygotowania łącza pobierania. Lub przekierowanie dzieje się na stronie. Te działania zwykle wykorzystują JavaScript, ale może również istnieć ukryta ramka, aby ułatwić te akcje.
Jeśli szukasz metody łatwego pobierania plików z witryny pobierania, zapoznaj się z pługiem dołączonym do lemiesz .
źródło
wget
próbie dodania--auth-no-challenge
. Działa jak magia.Po prostu chcesz dodać do powyższych odpowiedzi, że możesz użyć funkcji „Kopiuj jako cURL” dostępnej w narzędziach programistycznych Chrome (od wersji 26.0) i Firebug (od wersji 1.12 ). Dostęp do tej funkcji można uzyskać, klikając prawym przyciskiem myszy wiersz żądania na karcie Sieć.
źródło
Enable persistent logs
zakładkę ustawień narzędzi programistycznych Firefoksa, aby zapobiec usuwaniu dzienników sieciowych po przekierowaniu. Chrome ma podobną opcję. Nawiasem mówiąc, „Kopiuj jako cURL” jest już od jakiegoś czasu w Firefoksie Nightly / Aurora / Beta i ma się ukazać w kolejnej dużej wersji (31.0).Próbowałem wszystkich powyższych, jednak bez powodzenia; użyłem narzędzia przeglądarki dev, aby pobrać ciąg user-agent, gdy dodałem następujące, sukces:
źródło
W zależności od tego, o co prosisz, może to być plik cookie. W przeglądarce Firefox możesz kliknąć prawym przyciskiem myszy na wyświetlonej stronie „Wyświetl informacje o stronie”. Wybierz ikonę „Bezpieczeństwo”, a następnie kliknij przycisk „Wyświetl pliki cookie”.
Do rozwiązywania problemów związanych z plikami cookie niezbędna jest wtyczka „Live HTTP Headers” do przeglądarki Firefox. Możesz zobaczyć, jakie pliki cookie są ustawiane i jakie pliki cookie są wysyłane z powrotem na serwer internetowy.
wget
może pracować z plikami cookie, ale jest to całkowicie irytujące, ponieważ nie daje wskazówki, że nie wysłał plików cookie. Najlepiej jest usunąć wszystkie powiązane pliki cookie z przeglądarki i przejść przez dowolną początkową procedurę logowania lub sekwencję przeglądania stron. Sprawdź „Nagłówki HTTP na żywo”, aby znaleźć pliki cookie i parametry POST lub GET. Wykonaj pierwszy krok logowania przywget
użyciu opcji „--keep-session-cookies” i „--save-cookies”. Otrzymasz plik cookie, który możesz przeglądać za pomocą edytora tekstu. Użyjwget --load-cookies
z plikiem cookie w kolejnych krokach.źródło
Innym powodem może być to, że witryna wymaga protokołu SSL. Twoja przeglądarka automatycznie przekieruje z HTTP na HTTPS, ale curl i wget nie. Wypróbuj więc żądanie za pomocą HTTPS zamiast HTTP.
źródło