Apa cara tercepat untuk mendapatkan HTTP dengan Python jika saya tahu konten akan menjadi string? Saya mencari dokumentasi untuk satu-liner cepat seperti:
contents = url.get("http://example.com/foo/bar")
Tapi yang bisa saya temukan menggunakan Google adalah httplib
dan urllib
- dan saya tidak dapat menemukan jalan pintas di perpustakaan itu.
Apakah standar Python 2.5 memiliki jalan pintas dalam beberapa bentuk seperti di atas, atau haruskah saya menulis fungsi url_get
?
- Saya lebih suka untuk tidak menangkap output dari penembakan ke
wget
ataucurl
.
python
http
networking
Frank Krueger
sumber
sumber
Jawaban:
Python 3:
Python 2:
Dokumentasi untuk
urllib.request
danread
.sumber
close
Andaread
. Apakah itu perlu?read
. Tapi satuwith
blok akan lebih jelas dan lebih aman untuk Jython, dll.requests
berfungsi dengan baikr = urllib2.urlopen("http://blah.com/blah")
dan kemudiantext = r.read()
. Sinkronisasi, hanya menunggu hasil dalam "teks".Anda bisa menggunakan perpustakaan yang disebut permintaan .
Ini cukup mudah. Maka Anda bisa melakukan ini:
sumber
pip install
). Untuk pustaka non-murni, ada langkah tambahan - Anda perlupip install
lib ke instance AWS Linux (varian OS yang sama lambda berjalan di bawah), kemudian salin file-file itu sebagai gantinya sehingga Anda akan memiliki kompatibilitas biner dengan AWS Linux. Satu-satunya perpustakaan yang Anda tidak selalu dapat menggunakan di Lambda adalah mereka dengan distribusi biner saja, yang untungnya cukup langka.pip install requests
.from botocore.vendored import requests
Penggunaanresponse = requests.get('...')
Jika Anda ingin solusi dengan httplib2 menjadi oneliner pertimbangkan instantiating objek Http anonim
sumber
Lihat httplib2 , yang - di sebelah banyak fitur yang sangat berguna - memberikan apa yang Anda inginkan.
Di mana konten akan menjadi badan respons (sebagai string), dan resp akan berisi header status dan respons.
Itu tidak disertakan dengan instalasi python standar (tetapi hanya membutuhkan python standar), tapi itu pasti patut dicoba.
sumber
Cukup sederhana dengan
urllib3
perpustakaan yang kuat .Impor seperti ini:
Dan buat permintaan seperti ini:
Anda juga dapat menambahkan tajuk:
Info lebih lanjut dapat ditemukan di dokumentasi urllib3 .
urllib3
jauh lebih aman dan lebih mudah digunakan daripada builtinurllib.request
atauhttp
modul dan stabil.sumber
solusi theller untuk wget benar-benar berguna, namun, saya menemukan itu tidak mencetak kemajuan selama proses pengunduhan. Ini sempurna jika Anda menambahkan satu baris setelah pernyataan cetak di publikasi ulang.
sumber
Berikut ini skrip wget dalam Python:
sumber
Tanpa impor lebih lanjut yang diperlukan solusi ini bekerja (untuk saya) - juga dengan https:
Saya sering mengalami kesulitan mengambil konten ketika tidak menentukan "User-Agent" di informasi header. Maka biasanya permintaan dibatalkan dengan sesuatu seperti:
urllib2.HTTPError: HTTP Error 403: Forbidden
atauurllib.error.HTTPError: HTTP Error 403: Forbidden
.sumber
Cara juga mengirim tajuk
Python 3:
Python 2:
sumber
Jika Anda bekerja dengan API HTTP secara khusus, ada juga pilihan yang lebih nyaman seperti Nap .
Misalnya, inilah cara mendapatkan intisari dari Github sejak 1 Mei 2014 :
Contoh lainnya: https://github.com/kimmobrunfeldt/nap#examples
sumber
Solusi terbaik Xuan, Theller.
Agar bisa bekerja dengan python 3 buat perubahan berikut
Juga, URL yang Anda masukkan harus didahului dengan "http: //", jika tidak maka akan muncul kesalahan jenis url yang tidak dikenal.
sumber
Untuk
python >= 3.6
, Anda dapat menggunakan dload :Untuk
json
:Install:
pip install dload
sumber
Sebenarnya dengan python kita dapat membaca dari url seperti dari file, berikut adalah contoh untuk membaca json dari API.
sumber
Jika Anda ingin API tingkat lebih rendah:
sumber