อะไรคือความแตกต่างระหว่าง 'เนื้อหา' และ 'ข้อความ'


122

ฉันใช้ไลบรารีคำขอ Python ที่ยอดเยี่ยม ผมสังเกตเห็นว่าเอกสารที่ดีมีตัวอย่างหลายวิธีที่จะทำบางสิ่งบางอย่างได้โดยไม่ต้องอธิบายว่าทำไม ตัวอย่างเช่นทั้งสองr.textและr.contentแสดงเป็นตัวอย่างวิธีรับการตอบสนองของเซิร์ฟเวอร์ แต่มีที่ไหนอธิบายว่าคุณสมบัติเหล่านี้ทำอะไร? ตัวอย่างเช่นฉันจะเลือกอย่างใดอย่างหนึ่งเมื่อใด ฉันเห็นว่า thar r.textส่งคืนอ็อบเจ็กต์ Unicode ในบางครั้งและฉันคิดว่าจะมีความแตกต่างสำหรับการตอบสนองที่ไม่ใช่ข้อความ แต่เอกสารทั้งหมดนี้อยู่ที่ไหน? โปรดทราบว่าเอกสารที่เชื่อมโยงจะระบุ:

คุณยังสามารถเข้าถึงเนื้อหาการตอบสนองเป็นไบต์สำหรับคำขอที่ไม่ใช่ข้อความ:

แต่จากนั้นก็แสดงตัวอย่างการตอบกลับข้อความ! ฉันสามารถสมมติได้ว่าคำพูดข้างต้นหมายถึงการพูดnon-text responsesแทนnon-text requestsเนื่องจากคำขอที่ไม่ใช่ข้อความไม่สมเหตุสมผลใน HTTP

ในระยะสั้นเอกสารที่เหมาะสมของไลบรารีอยู่ที่ไหนเมื่อเทียบกับบทช่วยสอน (ยอดเยี่ยม) ในไซต์คำขอ Python


คำตอบ:


144

อินเตอร์เฟซที่นักพัฒนามีรายละเอียดเพิ่มเติมได้ที่:

r.textคือเนื้อหาของการตอบกลับใน Unicode และr.contentเป็นเนื้อหาของการตอบสนองในหน่วยไบต์


46
และคุณจะเลือกอย่างใดอย่างหนึ่งเมื่อใด
multigoodverse

13
@multigoodverse: น่าr.textจะเป็นที่ต้องการสำหรับการตอบกลับแบบข้อความเช่นเอกสาร HTML หรือ XML และr.contentเป็นที่ต้องการสำหรับประเภทไฟล์ "ไบนารี" เช่นไฟล์รูปภาพหรือ PDF
dotancohen

5
@dotancohen HTML และ XML ใช้การประกาศในข้อมูลที่จะทำถอดรหัสของตัวเองและดังนั้นพวกเขาควรจะได้รับอาหารดิบr.contentไม่ r.textcoverted
tdelaney

โดยทั่วไปการตอบกลับครั้งเดียวอาจมีเนื้อหาที่ซ้อนกันหรือหลายส่วน (เช่นข้อความอีเมลที่มีไฟล์แนบ) และแต่ละส่วนอาจเข้ารหัสด้วยวิธีที่แตกต่างกัน เป็นไปไม่ได้ที่จะจัดการกับการตอบสนองดังกล่าวโดยไม่ต้องเข้าถึงสตรีมไบต์ แต่เป็นวิธีที่ไกลจากกรณีทั่วไปที่คุณต้องการเพียงข้อความ Unicode ที่ถอดรหัสอย่างถูกต้อง
holdenweb

ทำไมล่ามหลามจึงแสดงทั้งr.textและr.contentเป็นข้อความ ทำไมไม่แสดงr.contentเป็นข้อความและr.textเป็นบิต (ถ้านั่นคือสิ่งที่เป็นอยู่)?
Arnb

11

ดูเหมือนชัดเจนจากเอกสารคือ r.content

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

 >>> r.content

หากคุณอ่านเพิ่มเติมลงไปในหน้านั้นจะมีที่อยู่เช่นไฟล์รูปภาพ


2
ขอบคุณ. ตอนนี้ฉันเห็นbตัวอย่างแรกที่มีข้อความ "สำหรับคำขอที่ไม่ใช่ข้อความ" ซึ่งหมายความว่าวัตถุนั้นเป็นวัตถุไบต์ ไม่ชัดเจนว่าทำไมไบต์จึงแสดงเป็นข้อความบางทีนั่นอาจเป็น 'ความดี' ของ Python อีกตัวหนึ่ง แต่มันก็สับสนในบริบทนี้ ขอบคุณ
dotancohen

1
ดูเหมือนว่าจะมีความสำคัญกับ python 3.x มากกว่า python 2.x; โดยใช้requestsใน python 3 ใน page.content ให้ข้อผิดพลาดนี้: if 'rss' in page.content:->TypeError: a bytes-like object is required, not 'str'
Marc Maxmeister
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.