Apa yang saya coba lakukan di sini adalah mendapatkan header dari URL tertentu sehingga saya dapat menentukan jenis MIME. Saya ingin dapat melihat apakah http://somedomain/foo/
akan mengembalikan dokumen HTML atau gambar JPEG misalnya. Oleh karena itu, saya perlu mencari cara untuk mengirim permintaan HEAD agar saya dapat membaca tipe MIME tanpa harus mengunduh konten. Adakah yang tahu cara mudah untuk melakukan ini?
python
python-2.7
http
http-headers
content-type
fuentesjr
sumber
sumber
urlparse
, yang ditunjukkan oleh beberapa tanggapan yang berperingkat lebih rendah.httplib
diubah namanya menjadihttp.client
.requests
tidak dikirimkan dengan Python secara default.urllib2 dapat digunakan untuk melakukan permintaan HEAD. Ini sedikit lebih bagus daripada menggunakan httplib karena urllib2 mem-parsing URL untuk Anda alih-alih meminta Anda untuk membagi URL menjadi nama host dan jalur.
Header tersedia melalui response.info () seperti sebelumnya. Menariknya, Anda dapat menemukan URL tujuan Anda dialihkan:
sumber
httplib.HTTPConnection
, yang tidak menangani pengalihan secara otomatis.Requests
Cara wajib :sumber
Saya yakin pustaka Requests harus disebutkan juga.
sumber
allow_redirects
hanya dapat menonaktifkan pengalihan POST / PUT / DELETE. Contoh: head request no redirectHanya:
Sunting: Saya baru saja menyadari ada httplib2: D
teks tautan
sumber
request
. (Viz, itu akan berhasil tetapi itu gaya yang buruk dan jika Anda ingin menggunakannyaself
- sulit.)Untuk kelengkapan, memiliki jawaban Python3 yang setara dengan jawaban yang diterima menggunakan httplib .
Ini pada dasarnya adalah kode yang sama hanya saja pustaka tidak lagi disebut httplib tetapi http.client
sumber
sumber
import
? 1 untukurlparse
- bersama-sama denganhttplib
mereka memberikan kenyamananurllib2
, ketika berurusan dengan URL di sisi masukan.Sebagai tambahan, saat menggunakan httplib (setidaknya di 2.5.2), mencoba membaca respon dari permintaan HEAD akan memblokir (di readline) dan kemudian gagal. Jika Anda tidak mengeluarkan bacaan pada tanggapan, Anda tidak dapat mengirim permintaan lain pada koneksi, Anda harus membuka yang baru. Atau terima penundaan yang lama di antara permintaan.
sumber
Saya telah menemukan bahwa httplib sedikit lebih cepat dari urllib2. Saya menghitung waktu dua program - satu menggunakan httplib dan yang lainnya menggunakan urllib2 - mengirim permintaan HEAD ke 10.000 URL. Yang httplib lebih cepat beberapa menit. Statistik total httplib adalah: real 6m21.334s pengguna 0m2.124s sys 0m16.372s
Dan statistik total urllib2 adalah: real 9m1.380s user 0m16.666s sys 0m28.565s
Apakah ada orang lain yang punya masukan tentang ini?
sumber
Dan pendekatan lain (mirip dengan jawaban Pawel):
Hanya untuk menghindari metode tak terbatas di tingkat instance.
sumber
Mungkin lebih mudah: gunakan urllib atau urllib2.
f.info () adalah objek mirip kamus, jadi Anda bisa melakukan f.info () ['content-type'], dll.
http://docs.python.org/library/urllib.html
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/httplib.html
Catatan dokumen bahwa httplib biasanya tidak digunakan secara langsung.
sumber