Python - การตอบสนองของ HTTP
http หรือ Hyper Text Transfer Protocol ทำงานบนไคลเอนต์เซิร์ฟเวอร์รุ่น โดยปกติเว็บเบราว์เซอร์คือไคลเอนต์และคอมพิวเตอร์ที่โฮสต์เว็บไซต์เป็นเซิร์ฟเวอร์ เมื่อได้รับคำขอจากไคลเอนต์เซิร์ฟเวอร์จะสร้างการตอบสนองและส่งกลับไปยังไคลเอนต์ในรูปแบบที่แน่นอน
หลังจากรับและตีความข้อความร้องขอเซิร์ฟเวอร์จะตอบกลับด้วยข้อความตอบกลับ HTTP:
- A Status-line
- Zero or more header (General|Response|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
ส่วนต่อไปนี้จะอธิบายแต่ละเอนทิตีที่ใช้ในข้อความตอบกลับ HTTP
สถานะข้อความ - บรรทัด
Status-Line ประกอบด้วยเวอร์ชันโปรโตคอลตามด้วยรหัสสถานะตัวเลขและข้อความที่เกี่ยวข้อง องค์ประกอบถูกคั่นด้วยอักขระ SP เว้นวรรค
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
เวอร์ชัน HTTP
เซิร์ฟเวอร์ที่รองรับ HTTP เวอร์ชัน 1.1 จะส่งคืนข้อมูลเวอร์ชันต่อไปนี้:
HTTP-Version = HTTP/1.1
รหัสสถานะ
องค์ประกอบ Status-Code คือจำนวนเต็ม 3 หลักโดยที่ตัวเลขหลักแรกของ Status-Code จะกำหนดคลาสของการตอบกลับและตัวเลขสองหลักสุดท้ายไม่มีบทบาทในการจัดหมวดหมู่ มี 5 ค่าสำหรับหลักแรก:
SN | รหัสและคำอธิบาย |
---|---|
1 | 1xx: Informational หมายความว่าได้รับคำขอแล้วและกำลังดำเนินการต่อ |
2 | 2xx: Success หมายความว่าการกระทำได้รับการตอบรับเข้าใจและยอมรับได้สำเร็จ |
3 | 3xx: Redirection หมายความว่าจะต้องดำเนินการเพิ่มเติมเพื่อให้คำขอเสร็จสมบูรณ์ |
4 | 4xx: Client Error หมายความว่าคำขอมีไวยากรณ์ที่ไม่ถูกต้องหรือไม่สามารถดำเนินการได้ |
5 | 5xx: Server Error หมายความว่าเซิร์ฟเวอร์ไม่สามารถดำเนินการตามคำขอที่ถูกต้องชัดเจน |
รหัสสถานะ HTTP สามารถขยายได้และแอปพลิเคชัน HTTP ไม่จำเป็นต้องเข้าใจความหมายของรหัสสถานะที่ลงทะเบียนทั้งหมด
ใช้คำขอ Python
ในโปรแกรม python ด้านล่างเราใช้โมดูล urllib3 เพื่อสร้างคำขอ http GET และรับการตอบสนองที่มีข้อมูล นอกจากนี้ยังมีรหัสตอบกลับซึ่งจัดการโดยฟังก์ชันในโมดูล ออบเจ็กต์ PoolManager จัดการรายละเอียดทั้งหมดของการรวมการเชื่อมต่อและจัดการกับความปลอดภัยของเธรด
import urllib3
http = urllib3.PoolManager()
resp = http.request('GET', 'http://tutorialspoint.com/robots.txt')
print resp.data
# get the status of the response
print resp.status
เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้ -
User-agent: *
Disallow: /tmp
Disallow: /logs
Disallow: /rate/*
Disallow: /cgi-bin/*
Disallow: /videotutorials/video_course_view.php?*
Disallow: /videotutorials/course_view.php?*
Disallow: /videos/*
Disallow: /*/*_question_bank/*
Disallow: //*/*/*/*/src/*
200