Python - Phản hồi HTTP
Http hoặc Hyper Text Transfer Protocol hoạt động trên mô hình máy chủ khách hàng. Thông thường trình duyệt web là máy khách và máy tính lưu trữ trang web là máy chủ. Khi nhận được yêu cầu từ máy khách, máy chủ sẽ tạo một phản hồi và gửi lại cho máy khách theo một định dạng nhất định.
Sau khi nhận và diễn giải một thông báo yêu cầu, một máy chủ sẽ trả lời bằng một thông báo phản hồi 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
Các phần sau giải thích từng thực thể được sử dụng trong thông báo phản hồi HTTP.
Dòng trạng thái tin nhắn
Dòng trạng thái bao gồm phiên bản giao thức theo sau là mã trạng thái số và cụm từ văn bản liên quan của nó. Các phần tử được phân tách bằng ký tự SP khoảng trắng.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Phiên bản HTTP
Máy chủ hỗ trợ HTTP phiên bản 1.1 sẽ trả về thông tin phiên bản sau:
HTTP-Version = HTTP/1.1
Mã trạng thái
Phần tử Mã trạng thái là một số nguyên 3 chữ số trong đó chữ số đầu tiên của Mã trạng thái xác định loại phản hồi và hai chữ số cuối cùng không có bất kỳ vai trò phân loại nào. Có 5 giá trị cho chữ số đầu tiên:
SN | Mã và Mô tả |
---|---|
1 | 1xx: Informational Nó có nghĩa là yêu cầu đã được nhận và quá trình này đang tiếp tục. |
2 | 2xx: Success Nó có nghĩa là hành động đã được nhận, hiểu và chấp nhận thành công. |
3 | 3xx: Redirection Nó có nghĩa là phải thực hiện thêm hành động để hoàn thành yêu cầu. |
4 | 4xx: Client Error Nó có nghĩa là yêu cầu chứa cú pháp không chính xác hoặc không thể được thực hiện. |
5 | 5xx: Server Error Nó có nghĩa là máy chủ không thực hiện được yêu cầu hợp lệ. |
Mã trạng thái HTTP có thể mở rộng và các ứng dụng HTTP không bắt buộc phải hiểu ý nghĩa của tất cả các mã trạng thái đã đăng ký.
Sử dụng yêu cầu Python
Trong chương trình python dưới đây, chúng tôi sử dụng mô-đun urllib3 để thực hiện yêu cầu http GET và nhận phản hồi có chứa dữ liệu. Nó cũng cung cấp mã phản hồi cũng được quản lý bởi các chức năng trong mô-đun. Đối tượng PoolManager xử lý tất cả các chi tiết của việc gộp kết nối và cũng xử lý an toàn luồng.
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
Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:
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