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