2013-01-11 26 views

Trả lời

54

Gửi một HEAD request:

>>> import requests 
>>> response = requests.head('http://example.com') 
>>> response.headers 
    {'connection': 'close', 
'content-encoding': 'gzip', 
'content-length': '606', 
'content-type': 'text/html; charset=UTF-8', 
'date': 'Fri, 11 Jan 2013 02:32:34 GMT', 
'last-modified': 'Fri, 04 Jan 2013 01:17:22 GMT', 
'server': 'Apache/2.2.3 (CentOS)', 
'vary': 'Accept-Encoding'} 

Một Yêu cầu HEAD

giống như một yêu cầu GET mà chỉ tải các tiêu đề. Lưu ý rằng nó tùy thuộc vào máy chủ để thực sự tôn trọng yêu cầu HEAD của bạn. Một số máy chủ sẽ chỉ phản hồi các yêu cầu GET, vì vậy bạn sẽ phải gửi yêu cầu GET và chỉ đóng kết nối thay vì tải xuống phần thân. Lần khác, máy chủ không bao giờ chỉ định tổng kích thước của tệp.

+16

Lưu ý rằng không phải mọi phản ứng nhất thiết sẽ bao gồm một 'nội dung length' - đôi khi phản ứng được tạo ra sử dụng 'Transfer-Encoding: chunked', trong trường hợp đó không có cách nào để biết phản ứng sẽ kéo dài bao lâu, trừ khi bạn thực sự nhận được toàn bộ phản hồi. –

+2

điều này là khác nhau sau đó kích thước lấy bằng cách sử dụng 'urllib.urlopen (url) .info() ['content-length']', vì vậy không chính xác những gì tôi muốn. –

11

sử dụng requests.get(url, stream=True).headers['Content-length']

stream=True có nghĩa là khi trở về chức năng, chỉ tiêu đề phản ứng sẽ được tải về, cơ thể phản ứng không phải là.

Cả requests.getrequest.head có thể giúp bạn tiêu đề nhưng có một lợi thế của việc sử dụng get

  1. get là linh hoạt hơn, nếu bạn muốn tải về cơ thể phản ứng sau khi kiểm tra độ dài, bạn có thể bắt đầu bằng cách đơn giản là truy cập content thuộc tính hoặc sử dụng số iterator sẽ tải xuống nội dung theo các khối
  2. "yêu cầu HEAD NÊN trùng với thông tin được gửi để phản hồi yêu cầu GET". nhưng không phải lúc nào cũng vậy.

đây là một ví dụ về việc chiều dài của một MIT open course video

MitOpenCourseUrl = "http://www.archive.org/download/MIT6.006F11/MIT6_006F11_lec01_300k.mp4" 
resHead = requests.head(MitOpenCourseUrl) 
resGet = requests.get(MitOpenCourseUrl,stream=True) 
resHead.headers['Content-length'] # output 169 
resGet.headers['Content-length'] # output 121291539 
Các vấn đề liên quan