2014-07-09 16 views
5

Khi tôi yêu cầu một bức ảnh từ Facebook, một số url là như thế này:Facebook ảnh có được các thông số và hình ảnh có sẵn trong bao lâu

https://{hidden_for_privacy}79141548_n.jpg 

Và những người khác là như thế này:

https://{hidden_for_privacy}23364315_n.jpg?oh=c566c56ca9fd7eb1ed5d8bfca4255e84&oe=544AF123&__gda__=1414682395_6d2cb778f5b2c857d1be1c781e81cdfa 

thứ hai có thêm một vài tham số GET (oh, oe và __gda_ _ (khoảng trống để ngăn chặn in đậm)

Khi các thông số này tồn tại, hình ảnh sẽ không hợp lệ sau một vài ngày vì các giá trị đó sẽ khác nhau (bạn ca n kiểm tra điều này bằng cách thực hiện một cuộc gọi API mới để có được cùng một bức ảnh).

Các tham số này có ý nghĩa gì và chúng được liên kết như thế nào với khung thời gian tối đa?

Cảm ơn!

+0

Bạn có tìm thấy gì về điều này không? tôi chỉ có cùng một vấn đề. – cappie013

+0

Không có giải pháp thực sự. Những gì chúng tôi đã làm để vượt qua vấn đề này. Để tải xuống hình ảnh trong vòng 24 giờ và lưu trữ hình ảnh đó ở nơi khác. – Luc

Trả lời

-1

Tôi đã tìm thấy câu trả lời (cuối cùng). Vấn đề là các bức ảnh không được công khai. Nếu bạn yêu cầu ảnh riêng tư thông qua API, họ thêm chuỗi truy vấn để url không còn hợp lệ sau một thời gian. Do đó ảnh vẫn còn hơi "riêng tư". Tính năng này là dễ hiểu và không có cách giải quyết nào khác ngoài việc tải hình ảnh xuống một số nơi khác.

+0

Vì tò mò, bạn tìm thấy câu trả lời ở đâu? Tôi giả định không có nơi nào trong tài liệu đồ thị FB, tất nhiên. –

+0

Bạn có thể biết thời gian này "sau một thời gian" được định nghĩa không? Tôi muốn tạo chức năng làm mới để làm mới URL hình ảnh – xetra11

1

Tôi nghĩ rằng đó là khóa phiên hình ảnh facebook và chúng được sản xuất bởi facebook trên mọi hình ảnh hiển thị. Vì vậy, các máy chủ fb xem xét rằng yêu cầu cho một hình ảnh được cho phép và được biết đến bởi chính Facebook.

Xin lỗi vì tiếng Anh xấu của tôi và nhận xét cạn của tôi, nhưng tôi nghĩ giải pháp của vấn đề này có thể là tìm nạp url cho phiên hình ảnh mới khi phiên cũ hết hạn. Hoặc tôi không biết toàn bộ hệ thống của bạn nhưng có thể bạn có thể kết nối với cơ chế gán-khóa-cho-hình ảnh của facebook đó trực tiếp và nhận tất cả các liên kết mới.

Nếu tôi đúng về các mục đích cơ chế làm việc của các thông số đó, tôi nghĩ rằng không có giải pháp thứ hai. Xin lỗi vì tiếng Anh xấu của tôi một lần nữa.

9

Tôi biết một số lịch sử và mục đích của nó.

Nguyên facebook url hình ảnh giống như thế này
https: // {* snipped *} /XXXXXXXXXXX_b.jpg
nhưng có hơn vào kích thước của hình ảnh có sẵn để mọi người được tiếp cận với hình ảnh thu nhỏ chỉ đơn giản là có thể thay thế hậu tố _b với _n
(Vì vậy, bây giờ là https: // {* snipped *} /XXXXXXXXXXX_n.jpg)
để truy cập vào phiên bản lớn hơn của hình ảnh (nếu có).

Một thời gian sau, facebook triển khai hệ thống hình ảnh trung tâm có thể tự động cắt và thay đổi kích thước hình ảnh khi đang di chuyển theo yêu cầu.
Url được cung cấp bởi facebook tại thời điểm này có thể trông giống như sau:
https: // {* snipped *} .fbcdn.net/hprofile-xxx1/v/t1.0-1/p32x32/12345678_123412341234123_4123412341234123412_n.jpg
Và khi mọi người thấy url, sự tò mò của họ phát sinh.

Hãy thử xóa một số tham số khỏi url.
https: // {* snipped *} .fbcdn.net/hprofile-xxx1/v/12345678_123412341234123_4123412341234123412_n.jpg
Và những gì họ nhận được là phiên bản lớn nhất và đầy đủ nhất của hình ảnh mà họ có thể nhận được từ máy chủ facebook.

Phương pháp này đã hoạt động trong một thời gian dài.
Khi mọi người nhìn thấy hình ảnh trong email của họ (chủ yếu là ảnh tiểu sử), họ có thể nhận được phiên bản hoàn chỉnh của hình ảnh mà không cần đăng nhập vào facebook.
Nó hoạt động ở mọi nơi bao gồm ảnh hồ sơ cá nhân.

Giải pháp khắc phục nhanh nhất và rẻ nhất cho facebook là ký đường dẫn yêu cầu với một số thuật toán chữ ký.
Tôi đoán họ sử dụng HMAC làm thuật toán cốt lõi và lấy được đầu vào HMAC từ nhiều nguồn khác nhau kể cả đường dẫn yêu cầu.
Điều này sẽ đảm bảo rằng bên duy nhất có thể tạo url hợp lệ là một trong những người có khóa HMAC. (có lẽ chỉ là facebook)

Bây giờ vấn đề cũ là cố định bạn không thể sử dụng nó nữa nhưng có nhiều vấn đề có thể được sửa bằng cách thêm MAC.

Việc vô hiệu hóa quyền truy cập vào hình ảnh là không hợp lệ.
Giả sử mọi người xuất bản ảnh của họ (giờ đây người khác có thể có cả đường dẫn yêu cầu hợp lệ cùng với chữ ký đã ký từ facebook) và sau đó họ đổi ý và đặt ảnh riêng tư.

Tuy nhiên, những người có url và chữ ký hợp lệ vẫn có thể tìm nạp hình ảnh từ máy chủ facebook.
Để giải quyết vấn đề này với nguồn tài nguyên siêu rẻ được coi là họ đã thực hiện tính toán HMAC.
(Và để che khuất thực tế rằng facebook không thực sự xóa hình ảnh của bạn khỏi hệ thống của chúng khi bạn xóa nó.)
Chúng quyết định trộn giá trị bắt nguồn từ dấu thời gian vào đầu vào của HMAC.
(Xem RFC-6238 để sử dụng tương tự)

Vì vậy, làm mới chữ ký từ facebook được yêu cầu định kỳ để truy cập vào ảnh.
Điều này giải quyết được vấn đề thứ hai với nguồn lực bổ sung rất rẻ.

Và ở đây bạn có nó.
Một số lịch sử và lý do đằng sau các thông số của facebook.

Tôi chắc chắn rằng không có tài liệu chính thức về khung thời gian nhưng không khó để tự mình thực hiện một số thử nghiệm cho rằng bây giờ bạn biết rằng giá trị của khung thời gian bạn muốn là cố định và có thể dự đoán được.

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