Apa perbedaan antara 'konten' dan 'teks'

122

Saya menggunakan perpustakaan Permintaan Python yang hebat . Saya perhatikan bahwa dokumentasi yang bagus memiliki banyak contoh tentang bagaimana melakukan sesuatu tanpa menjelaskan alasannya . Sebagai contoh, kedua r.textdan r.contentditampilkan sebagai contoh bagaimana untuk mendapatkan respon server. Tetapi di mana dijelaskan apa yang dilakukan properti-properti ini? Misalnya, kapan saya akan memilih salah satu dari yang lain? Saya melihat bahwa kadang-kadangr.text mengembalikan objek unicode , dan saya kira akan ada perbedaan untuk respons non-teks. Tapi di mana semua ini didokumentasikan? Perhatikan bahwa dokumen tertaut menyatakan:

Anda juga dapat mengakses isi respons sebagai byte, untuk permintaan non-teks:

Tapi kemudian itu menunjukkan contoh respons teks! Saya hanya dapat beranggapan bahwa kutipan di atas berarti mengatakan non-text responsesdaripada non-text requests, karena permintaan non-teks tidak masuk akal dalam HTTP.

Singkatnya, di mana dokumentasi perpustakaan yang tepat, yang bertentangan dengan tutorial (sangat baik) di situs Permintaan Python?

dotancohen
sumber

Jawaban:

144

The antarmuka pengembang memiliki rincian lebih lanjut:

r.textadalah konten respons dalam Unicode, dan r.contentmerupakan konten respons dalam byte.

Gary Kerr
sumber
46
Dan kapan Anda akan memilih satu atau yang lain?
multigoodverse
13
@multigoodverse: Agaknya r.textlebih disukai untuk tanggapan tekstual, seperti dokumen HTML atau XML, dan r.contentlebih disukai untuk jenis berkas "biner", seperti gambar atau berkas PDF.
dotancohen
5
@dotancohen HTML dan XML menggunakan deklarasi dalam data untuk melakukan decoding mereka sendiri dan karenanya harus diberi makan mentah r.content, bukan yang terselubung r.text.
tdelaney
Secara umum, satu tanggapan mungkin berisi konten bertingkat atau multi bagian (seperti pesan email dengan lampiran), dan setiap bagian mungkin dikodekan dengan cara yang berbeda. Tidak mungkin untuk menangani respons seperti itu tanpa akses ke aliran byte, tetapi ini jauh dari kasus umum, di mana Anda hanya ingin teks Unicode yang didekode dengan benar.
holdenweb
Mengapa penerjemah python menunjukkan keduanya r.textdan r.contentsebagai teks. Mengapa tidak ditampilkan r.contentsebagai teks dan r.textsebagai bit (jika memang seperti itu)?
Arnb
11

Tampak jelas dari dokumentasi adalah bahwa r.content

You can also access the response body as bytes, for non-text requests:

 >>> r.content

Jika Anda membaca lebih jauh ke bawah halaman itu membahas misalnya file gambar

PyNEwbie
sumber
2
Terima kasih. Sekarang saya melihat contoh kecil bsebelum contoh pertama dengan teks "untuk permintaan non-teks", yang berarti bahwa objek tersebut adalah objek byte. Tidak jelas mengapa byte ditampilkan sebagai teks, mungkin itu adalah 'kebaikan' Python lainnya, tetapi membingungkan dalam konteks ini. Terima kasih.
dotancohen
1
ini tampaknya lebih penting dengan python 3.x daripada python 2.x; menggunakan requestspython 3 di halaman. konten memberikan kesalahan ini: if 'rss' in page.content:->TypeError: a bytes-like object is required, not 'str'
Marc Maxmeister