Python - Yêu cầu HTTP
Http hoặc Hyper Text Transfer Protocol hoạt động trên mô hình máy chủ khách. 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ủ. Trong python, chúng tôi sử dụng mô-đun yêu cầu để tạo các yêu cầu http. Nó là một mô-đun rất mạnh có thể xử lý nhiều khía cạnh của giao tiếp http ngoài dữ liệu yêu cầu và phản hồi đơn giản. Nó có thể xử lý xác thực, nén / giải nén, yêu cầu phân đoạn, v.v.
Máy khách HTTP gửi một yêu cầu HTTP đến máy chủ ở dạng thông báo yêu cầu bao gồm định dạng sau:
- Dòng yêu cầu
- Không hoặc nhiều trường tiêu đề (Chung | Yêu cầu | Thực thể) theo sau là CRLF
- Một dòng trống (tức là một dòng không có gì đứng trước CRLF) cho biết phần cuối của các trường tiêu đề
- Tùy chọn nội dung thư
Các phần sau giải thích từng thực thể được sử dụng trong thông báo yêu cầu HTTP.
Dòng yêu cầu
Dòng Yêu cầu bắt đầu bằng một mã thông báo phương thức, tiếp theo là URI Yêu cầu và phiên bản giao thức, và kết thúc bằng CRLF. Các phần tử được phân tách bằng ký tự SP khoảng trắng.
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Hãy thảo luận về từng phần được đề cập trong Dòng yêu cầu.
Phương thức yêu cầu
Yêu cầu method chỉ ra phương pháp được thực hiện trên tài nguyên được xác định bởi Request-URI. Phương thức này có phân biệt chữ hoa chữ thường và luôn phải được viết hoa. Bảng sau liệt kê tất cả các phương thức được hỗ trợ trong HTTP / 1.1.
SN | Phương pháp và Mô tả |
---|---|
1 | GET Phương thức GET được sử dụng để truy xuất thông tin từ máy chủ đã cho bằng cách sử dụng một URI nhất định. Các yêu cầu sử dụng GET chỉ nên truy xuất dữ liệu và không có tác dụng nào khác đối với dữ liệu. |
2 | HEAD Giống như GET, nhưng nó chỉ chuyển dòng trạng thái và phần tiêu đề. |
3 | POST Yêu cầu POST được sử dụng để gửi dữ liệu đến máy chủ, ví dụ: thông tin khách hàng, tải tệp lên, v.v. bằng các biểu mẫu HTML. |
4 | PUT Thay thế tất cả các bản trình bày hiện tại của tài nguyên đích bằng nội dung đã tải lên. |
5 | DELETE Loại bỏ tất cả các đại diện hiện tại của tài nguyên đích do URI cung cấp. |
6 | CONNECT Thiết lập một đường hầm đến máy chủ được xác định bởi một URI nhất định. |
7 | OPTIONS Mô tả các tùy chọn giao tiếp cho tài nguyên mục tiêu. |
số 8 | TRACE Thực hiện kiểm tra lại vòng lặp thông báo cùng với đường dẫn đến tài nguyên đích. |
Yêu cầu-URI
URI Yêu cầu là Định danh tài nguyên đồng nhất và xác định tài nguyên để áp dụng yêu cầu. Sau đây là các biểu mẫu được sử dụng phổ biến nhất để chỉ định một URI:
Request-URI = "*" | absoluteURI | abs_path | authority
SN | Phương pháp và Mô tả |
---|---|
1 | Dấu hoa thị *được sử dụng khi một yêu cầu HTTP không áp dụng cho một tài nguyên cụ thể mà cho chính máy chủ và chỉ được phép khi phương thức được sử dụng không nhất thiết phải áp dụng cho một tài nguyên. Ví dụ: OPTIONS * HTTP/1.1 |
2 | Các absoluteURIđược sử dụng khi một yêu cầu HTTP được gửi tới một proxy. Proxy được yêu cầu để chuyển tiếp yêu cầu hoặc dịch vụ từ bộ đệm hợp lệ và trả lại phản hồi. Ví dụ: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
3 | Dạng phổ biến nhất của Request-URI được sử dụng để xác định tài nguyên trên máy chủ gốc hoặc cổng. Ví dụ: một máy khách muốn truy xuất tài nguyên trực tiếp từ máy chủ gốc sẽ tạo kết nối TCP đến cổng 80 của máy chủ "www.w3.org" và gửi các dòng sau: GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org Lưu ý rằng đường dẫn tuyệt đối không được để trống; nếu không có trong URI ban đầu, nó PHẢI được cung cấp là "/" (máy chủ gốc). |
Sử dụng yêu cầu Python
Chúng tôi sẽ sử dụng các yêu cầu mô-đun để tìm hiểu về yêu cầu http.
pip install requests
Trong ví dụ dưới đây, chúng ta thấy một trường hợp yêu cầu GET đơn giản và in ra kết quả của phản hồi. Chúng tôi chọn chỉ in 300 ký tự đầu tiên.
# How to make http request
import requests as req
r = req.get('http://www.tutorialspoint.com/python/')
print(r.text)[0:300]
Khi chúng tôi chạy chương trình trên, chúng tôi nhận được kết quả sau:
<!DOCTYPE html>
<!--[if IE 8]><html class="ie ie8"> <![endif]-->
<!--[if IE 9]><html class="ie ie9"> <![endif]-->
<!--[if gt IE 9]><!--> <html> <!--<![endif]-->
<head>
<!-- Basic -->
<meta charset="utf-8">
<title>Python Tutorial</title>
<meta name="description" content="Python Tutorial