Wget ile giriş sayfasını nasıl geçebilirim?


263

Bir sayfayı indirmek için Wget'i kullanmaya çalışıyorum , ancak giriş ekranını geçemiyorum.

Oturum açma sayfasındaki posta verilerini kullanarak kullanıcı adını / şifreyi nasıl gönderirim ve ardından asıl sayfayı kimliği doğrulanmış kullanıcı olarak nasıl indiririm?


Yanıtlar:


342

Kılavuz sayfasına göre:

# Log in to the server.  This only needs to be done once.
wget --save-cookies cookies.txt \
     --keep-session-cookies \
     --post-data 'user=foo&password=bar' \
     --delete-after \
     http://server.com/auth.php

# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

--post-dataParametrenin uygun şekilde yüzde olarak kodlandığından (özellikle ve işaretleri!) Emin olun, aksi takdirde istek muhtemelen başarısız olur. Ayrıca userve passwordanahtarlarının doğru olduğundan emin olun ; giriş sayfasının HTML kodunu kullanarak doğru tuşları öğrenebilirsiniz (tarayıcınızın “inceleme öğesi” özelliğine bakın ve namekullanıcı adı ve şifre alanlarındaki özelliği bulun ).


10
- ilk komut veya ikinciye --keep-session-cookies eklensin mi?
Felipe Alvarez

4
Bunun için -p( --page-requisites) gerekmez .
ændrük

14
--delete-afterİlk girişe de eklemeye değer , böylece sonuç sayfasını giriş yapmaktan kurtarmazsınız.
Jim Hunziker

2
Hata alıyorum WGET64: missing URLTüm wget komutunu bir satıra koydum ve kaldırdım ``
Mowgli

6
--keep-session-cookies yalnızca ilk komut için gereklidir. İlk komut, çerezleri dosyaya kaydederken oturum çerezlerini dahil etmesini söyler. İkinci komut, sağlanan dosyadaki tüm çerezleri okur.
Wadim

63

Bir kerelik kullanım için ihtiyacınız varsa, tarayıcı aracılığıyla giriş yapabilir ve daha sonra gerekli başlıkları kopyalayabilirsiniz:

ekran görüntüsü Geliştirici Araçları Ağ sekmesinde Kullanım "cURL olarak Kopyala" (açıldıktan sonra sayfayı yeniden) ve curl en başlık bayrağını değiştirmek -Hve --datawget en ile --headerve --post-data.


1
Harika bir çözüm!
Menteith

Müthiş! Aynı şeyi yapabileceğinden ve parametreleri değiştirmeme bile gerekmediğinden, wget yerine kıvırmayı kullanma seçeneğine de dikkat çekti.
Ocak

çok temiz ve basit bir çözüm, +1!
Kresimir Pendic

Bu benim için çalıştı wget, doğru çerezle işe yaramadı; Web hizmetinin "Kullanıcı-Aracı" veya "Önbellek Kontrolü" gibi önemsiz görünen birden fazla farklı GET başlığı olup olmadığını kontrol ettiğinden şüpheleniyorum.
Arthur

@Arthur benim için bu çözüm işe yarayan tek çözümdü. URL'den olabildiğince fazla başlık verisi kaldırmaya çalıştım ve aslında çerez verileriyle sonuçlandım. Bu yüzden wgetverileri yanlış bir şekilde sağladığından şüpheleniyorum .
Florian Blume

62

--No-cookies ve Cookie HTTP istek başlığı ile wget yapmak için mevcut bir bağlantının çerezlerini doğrudan verdim. Benim durumumda, giriş yapmanın daha karmaşık göründüğü bir Moodle üniversitesi girişiydi (giriş bileti ile birden fazla istek kullanarak). POST isteği olduğu için --post-data ekledim. Örneğin, tüm Moodle kullanıcıları listesini alın:

wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php


7
Harika bir ipucu. Bu, çereze kendi makinenizden erişebildiğinizde ve daha sonra komut satırından başka bir başsız makineden kullanabildiğinizde kullanışlıdır. :)
Tuxdude

3
Aynı anda birden fazla çerez de ayarlayabilirsiniz, --header "Cookie: access_token = IKVYJ; XSRF-TOKEN = 5e10521d"
Phil C

29

Ben de aynı problemi yaşadım. Benim çözümüm Chrome üzerinden giriş yapmak ve çerez verilerini bir metin dosyasına kaydetmekti. Bu, şu Chrome uzantısı ile kolayca yapılır: Chrome cookie.txt dışa aktarma uzantısı .

Çerez verilerini aldığınızda, bunları wget ile nasıl kullanacağınıza dair bir örnek vardır. Size basit bir kopyala yapıştır komut satırı sağlanır.


1
otomatik komut dosyalarında maalesef geçerli değil
Znik

1
Soru, otomatik komut dosyası belirtmemektedir. Bu çözüm, işin% 99'unun otomatik hale getirilmesini sağlar.
Will Sheppard

1
Ne yazık ki, Google bu hile için çok akıllı olmalı. Hala bir giriş sayfası alıyorum.
Josiah Yoder

1
Tabii ki, Google gizli reCAPTCHA'ları kullanıyor ... birçok yerde gördüğüm gibi, standart programlı API'leri kullanmak bu durumda en pratik seçenektir.
Josiah Yoder

10

Herhangi bir dosya indirmeyen bir astar istedi; burada çerez çıktısını bir sonraki talebe borulama örneği verilmiştir. Yalnızca Gentoo'da aşağıdakileri test ettim, ancak çoğu * nix ortamında çalışmalıdır:

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' (bu bir satırdır, ancak tarayıcınıza sarılır)

İsterseniz çıktı, bir dosyaya değişikliği kaydettikten -O -için-O /some/file/name


9

POSTed form verileri yapmak için cURL gerekmez. --post-data 'key1=value1&key2=value2'gayet iyi çalışıyor. Not: Dosyadaki POST verileriyle wget yapmak için bir dosya adı da iletebilirsiniz.


8

Temel kimlik doğrulaması kullanıyorlarsa:

wget http://username:password@www.domain.com/page.html

POSTed form verileri kullanıyorlarsa, bunun yerine cURL gibi bir şey kullanmanız gerekir .


Sunucudaki herhangi bir şeyi değiştirmek için erişimim yok, salt okunur
Señor Reginold Francis

7
Yani? Bunların hiçbiri sunucudaki herhangi bir şeyi değiştirmenizi gerektirmez.
ceejayoz

5

Vaşak ve wget kullanan bir çözüm.

Not: Lynx'in çalışması için --enable-persistent-cookies bayrağıyla derlenmiş olması gerekir

Giriş gerektiren bir siteden bazı dosyaları indirmek için wget kullanmak istediğinizde, sadece bir çerez dosyasına ihtiyacınız vardır. Çerez dosyasını oluşturmak için vaşak seçiyorum. lynx bir metin web tarayıcısıdır. İlk olarak, lynx'in çerezi kaydetmesi için bir yapılandırma dosyasına ihtiyacınız var. Bir dosya oluşturun lynx.cfg. Bu yapılandırmayı dosyaya yazın.

SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file

Ardından lynx'i şu komutla başlatın:

lynx -cfg=lynx.cfg http://the.site.com/login

Kullanıcı adını ve şifreyi girdikten sonra 'beni bu bilgisayarda koru'yu veya benzer bir şeyi seçtikten sonra. Başarılı bir şekilde giriş yaparsanız, sitenin güzel bir metin web sayfasını görürsünüz. Ve çıkış yapıyorsun. Geçerli dizinde, cookie.file adında bir çerez dosyası bulacaksınız. Uyanmak için ihtiyacımız olan şey bu.

Daha sonra wget bu komutla siteden dosya indirebilir.

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz

2
giriş javascript gerektiriyorsa ne olacak? lynx, javascript'i desteklemiyor gibi görünüyor.
Tiberiu

1

Sunucuda wget ile indirmek için örnek tarayıcınızda elde edilebilecek büyük bir dosya bağlantısı.

Örneğin, Google Chrome'u kullanma.

İhtiyacınız olan yere giriş yapın ve indir tuşuna basın. Bağlantınızı indirip kopyalayın.

resim açıklamasını buraya girin

Sonra açık DevTools oturum açma, gidin bir sayfada Konsolundan ve Şunu girerek, çerezlerinizi olsundocument.cookie

resim açıklamasını buraya girin

Şimdi sunucuya gidin ve dosyanızı indirin: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

resim açıklamasını buraya girin


Bu cevabın, iki sayfalık çerezlerin bulunduğu Google için iyi ölçeklenmediği anlaşılıyor!
Josiah Yoder

Tabii ki, Google gizli reCAPTCHA'ları kullanıyor ... birçok yerde gördüğüm gibi, standart programlı API'leri kullanmak bu durumda en pratik seçenektir.
Josiah Yoder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.