2015-10-07 11 views
6

Đôi khi tôi thấy người gọi API web sử dụng đối tượng requests.Session:Sự khác biệt giữa việc sử dụng requests.get() và requests.session(). Get()?

client = requests.session() 
resp = client.get(url='...') 

Nhưng đôi khi họ không:

resp = requests.get(url='...') 

ai đó có thể giải thích khi chúng ta nên sử dụng Session và khi chúng ta làm không cần họ?

+1

* Điểm dừng đầu tiên * của bạn phải là [tài liệu thư viện] (http://docs.python-requests.org/en/latest/user/advanced/#session-objects). –

Trả lời

9

Dưới nắp, requests.get() tạo đối tượng Session mới cho mỗi yêu cầu được thực hiện.

Bằng cách tạo đối tượng phiên ở phía trước, bạn có thể sử dụng lại phiên; điều này cho phép bạn duy trì cookie, ví dụ, và cho phép bạn sử dụng lại các thiết lập được sử dụng cho tất cả các kết nối như tiêu đề và tham số truy vấn. Để đầu này tất cả ra, phiên cho phép bạn tận dụng lợi thế của kết nối tổng hợp; sử dụng lại các kết nối cho cùng một máy chủ.

Xem Sessions documentation:

Các đối tượng Session cho phép bạn kéo dài thông số nhất định trên yêu cầu. Nó cũng tồn tại cookie trên tất cả các yêu cầu được tạo ra từ cá thể Phiên, và sẽ sử dụng kết nối tổng hợp của urllib3. Vì vậy, nếu bạn đang thực hiện một số yêu cầu cho cùng một máy chủ, kết nối TCP cơ bản sẽ được sử dụng lại, điều này có thể dẫn đến tăng hiệu suất đáng kể (xem HTTP persistent connection).

+0

Vì vậy, nếu yêu cầu HTTP của tôi là một nhiệm vụ một lần, sẽ không có sự khác biệt giữa hai phương pháp này, phải không? –

+1

@FredPym: chính xác. Ngay sau khi bạn thực hiện nhiều kết nối với cùng một máy chủ, việc sử dụng lại phiên là một ý tưởng hay. –

0

Để trích dẫn các đối tượng documentation

Session cho phép bạn kéo dài thông số nhất định trên yêu cầu. Nó cũng tồn tại cookie trên tất cả các yêu cầu được thực hiện từ phiên Phiên.

Các vấn đề liên quan