Saya mencoba mengunduh file dengan wget
dan curl
ditolak dengan kesalahan 403 (dilarang).
Saya dapat melihat file menggunakan browser web pada mesin yang sama.
Saya coba lagi dengan agen pengguna browser saya, yang diperoleh oleh http://www.whatsmyuseragent.com . Saya melakukan ini:
wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
dan
curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...
tapi itu masih dilarang. Apa alasan lain yang mungkin ada untuk 403, dan cara apa yang bisa saya ubah wget
dan curl
perintah untuk mengatasinya?
(Ini bukan tentang bisa mendapatkan file - saya tahu saya bisa menyimpannya dari browser saya; ini tentang memahami mengapa alat baris perintah bekerja secara berbeda)
memperbarui
Terima kasih atas semua jawaban bagus yang diberikan untuk pertanyaan ini. Masalah khusus yang saya temui adalah server sedang memeriksa pengarah. Dengan menambahkan ini ke baris perintah saya bisa mendapatkan file menggunakan curl
dan wget
.
Server yang diperiksa pengarah melambung melalui 302 ke lokasi lain yang dilakukan tidak ada pemeriksaan sama sekali, sehingga curl
atau wget
situs yang bekerja bersih.
Jika ada yang tertarik, ini terjadi karena saya membaca halaman ini untuk mempelajari tentang CSS yang disematkan dan mencoba melihat css situs sebagai contoh. URL aktual yang saya dapatkan bermasalah adalah ini dan curl
akhirnya saya adalah
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
dan wget adalah
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
Sangat menarik.
Jawaban:
Permintaan HTTP mungkin berisi lebih banyak tajuk yang tidak disetel oleh curl atau wget. Sebagai contoh:
key=val
, Anda dapat mengaturnya dengan opsi-b key=val
(atau--cookie key=val
) untukcurl
.curl
pilihan untuk ini-e URL
dan--referer URL
.curl
dengan opsi-u user:password
(atau--user user:password
).Mozilla
, atau mengandungWget
ataucurl
).Anda biasanya dapat menggunakan alat Pengembang browser Anda (Firefox dan Chrome mendukung ini) untuk membaca header yang dikirim oleh browser Anda. Jika koneksi tidak dienkripsi (yaitu, tidak menggunakan HTTPS), maka Anda juga dapat menggunakan sniffer paket seperti Wireshark untuk tujuan ini.
Selain tajuk ini, situs web juga dapat memicu beberapa tindakan di belakang layar yang mengubah status. Misalnya, saat membuka halaman, ada kemungkinan permintaan dilakukan di latar belakang untuk menyiapkan tautan unduhan. Atau pengalihan terjadi pada halaman. Tindakan ini biasanya menggunakan Javascript, tetapi mungkin juga ada bingkai tersembunyi untuk memfasilitasi tindakan ini.
Jika Anda mencari metode untuk mengambil file dengan mudah dari situs unduhan, lihat bajak, termasuk dengan mata bajak .
sumber
wget
mencoba menambahkan--auth-no-challenge
. Bekerja seperti sulap.Hanya ingin menambahkan jawaban di atas bahwa Anda dapat menggunakan fitur "Salin sebagai cURL" yang ada di alat pengembang Chrome (sejak v26.0) dan Firebug (sejak v1.12 ). Anda dapat mengakses fitur ini dengan mengklik kanan baris permintaan di tab Jaringan.
sumber
Enable persistent logs
pada tab pengaturan alat dev Firefox untuk mencegahnya menghapus log jaringan pada pengalihan. Chrome memiliki opsi serupa. Kebetulan, "Salin sebagai cURL" telah ada di Firefox Nightly / Aurora / Beta untuk sementara waktu sekarang, dan akan dirilis besar-besaran berikutnya (31.0).Mencoba semua hal di atas namun tidak berhasil; menggunakan alat dev browser untuk mendapatkan string agen-pengguna, setelah saya menambahkan yang berikut, sukses:
sumber
Tergantung pada apa yang Anda minta, itu bisa berupa cookie. Dengan Firefox, Anda dapat melakukan klik kanan saat Anda berada di halaman yang dimaksud, "Lihat Info Halaman". Pilih ikon "Keamanan", dan kemudian klik tombol "Lihat Cookie".
Untuk membingungkan cookie, plug-in "Live HTTP Headers" Firefox sangat penting. Anda dapat melihat cookie apa yang diatur, dan cookie apa yang dikirim kembali ke server web.
wget
dapat bekerja dengan cookie, tetapi itu benar-benar menyebalkan, karena tidak memberikan petunjuk bahwa itu tidak mengirim cookie. Taruhan terbaik Anda adalah untuk menghapus semua cookie terkait dari browser Anda, dan pergi melalui login awal atau urutan tampilan halaman yang diperlukan. Lihatlah "Header HTTP Langsung" untuk cookie, dan untuk setiap parameter POST atau GET. Lakukan langkah login pertama denganwget
menggunakan opsi "--keep-session-cookies" dan "--save-cookies". Itu akan memberi Anda file cookie yang dapat Anda lihat dengan editor teks. Gunakanwget --load-cookies
dengan file cookie untuk langkah selanjutnya.sumber
Alasan lain ini bisa terjadi adalah jika situs memerlukan SSL. Browser Anda akan secara otomatis meneruskan dari HTTP ke HTTPS tetapi curl dan wget tidak akan. Jadi cobalah permintaan dengan HTTPS alih-alih HTTP.
sumber