Internet Archive CDX API: lập danh mục bản lưu web
Internet Archive CDX API giúp tra chỉ mục các lần lưu trang để lập danh mục lịch sử URL. Bài này lấy một mẫu metadata công khai, xuất CSV và kiểm cách nhóm theo digest. Cần hiểu phạm vi URL, thời điểm capture và sự khác biệt giữa bản ghi chỉ mục với nội dung trang trước khi sử dụng. ProxyVN hướng dẫn cách kiểm trên dữ liệu mẫu.
Internet Archive CDX API cho danh mục lịch sử URL
CDX cung cấp dữ liệu chỉ mục để tìm các lần capture được dịch vụ trả về cho một phạm vi URL. Một dòng có thể chứa thời điểm, URL gốc, trạng thái và digest. Danh mục này phù hợp để chuẩn bị bảng khảo sát lịch sử trước khi quyết định có cần xem từng bản lưu hay không.
Trong bài, đầu vào là một URL công khai dùng làm mẫu nhỏ. Đầu ra là CSV metadata, không phải bản sao toàn bộ website. Pipeline chưa tải HTML của các capture, chưa lấy tài nguyên phụ và chưa xác minh rằng một phiên bản trang cụ thể có thể replay đầy đủ trong trình duyệt.
Mã nguồn và tài liệu CDX Server là nguồn tham khảo về các tham số truy vấn. Khi dùng một triển khai dịch vụ cụ thể, cần kiểm response thực tế và điều kiện hiện hành. Không suy từ khả năng của mã nguồn sang cam kết rằng mọi tùy chọn đều sẵn có ở mọi máy chủ.
Chỉ mục là bước chọn ứng viên
Một bản ghi chỉ mục giúp xác định capture để kiểm tiếp, nhưng chưa chứng minh toàn bộ nội dung trang đã được bảo toàn. Trang có thể phụ thuộc ảnh, CSS hoặc API ở những URL khác. Nếu mục tiêu là phục hồi giao diện, cần một quy trình riêng đánh giá từng thành phần thay vì chỉ đếm capture HTML.
Tương tự, một URL có lịch sử capture không chứng minh URL hiện tại còn hoạt động. Trạng thái được lưu phản ánh lần thu thập tương ứng theo chỉ mục. Muốn biết tình trạng hiện tại cần một phép kiểm ở thời điểm hiện tại, tách khỏi báo cáo lịch sử để không trộn hai câu hỏi.
Nếu không nhận được dòng nào, hãy ghi rõ truy vấn và phạm vi đã chạy. Kết quả đó chưa đủ kết luận trang chưa từng tồn tại hoặc chưa từng được lưu ở mọi hệ thống. Có thể phạm vi URL khác, dữ liệu không được trả về hoặc cách lọc đã loại những dòng mà anh em cần kiểm.
Internet Archive CDX API với phạm vi URL có chủ đích
Lựa chọn phạm vi là quyết định đầu tiên cần ghi vào hồ sơ. Tra một URL chính xác phù hợp kiểm một trang, còn tra host hay domain phục vụ câu hỏi rộng hơn. Nếu thay phạm vi trong khi so kết quả hai lần chạy, chênh lệch số dòng có thể do chính câu hỏi đã thay đổi.

Chọn phạm vi URL và bộ lọc capture
Bắt đầu bằng một URL chính xác
Ca kiểm của bài dùng example.com ở đường dẫn gốc và giới hạn ba dòng sau các điều kiện đã chọn. Mẫu nhỏ giúp kiểm việc đọc JSON, nhận header và xuất CSV mà không cần thu toàn bộ danh mục. Nó không được dùng để ước tính tổng số capture của tên miền đó.
Khi chuyển sang tên miền do mình quản lý, hãy liệt kê trước mục tiêu của bảng. Nếu cần các bài blog dưới một đường dẫn, phạm vi tiền tố có thể sát câu hỏi hơn cả domain. Nếu cần phân biệt các subdomain, cột URL gốc và quy tắc nhóm phải giữ được sự khác nhau đó.
Không tự loại giao thức, query string hoặc dấu gạch cuối khỏi dữ liệu gốc trước khi biết nhu cầu đối chiếu. Những biến thể URL có thể biểu thị tài nguyên hoặc thời kỳ vận hành khác nhau. Có thể tạo thêm khóa chuẩn hóa cho một mục đích cụ thể, nhưng vẫn giữ original để truy về bản ghi đã nhận.
Ghi bộ lọc vào metadata của lần chạy
Nếu chỉ lấy trạng thái 200, bảng sẽ không còn mô tả những capture có redirect hoặc lỗi. Điều đó phù hợp một nhiệm vụ tìm ứng viên có nội dung, nhưng không phù hợp khi muốn khảo sát lịch sử chuyển hướng. Người nhận phải thấy bộ lọc để hiểu những gì không nằm trong bảng.
Một giới hạn thời gian cũng thay đổi câu hỏi. Tra một giai đoạn riêng có thể dùng để phân tích chuyển đổi nội dung, nhưng không thể đem số dòng đó so với một bản xuất không giới hạn thời gian rồi kết luận hoạt động lưu trữ giảm. Cần so các tập có cùng hợp đồng trước khi diễn giải thay đổi.
Internet Archive CDX API bằng Python với mẫu JSON nhỏ
Đoạn mã sau thực hiện một yêu cầu có timeout và lưu response trước khi chuyển đổi. Trường cần lấy được nêu rõ trong fl để bản xuất dễ kiểm. Các giá trị timestamp và statuscode được giữ dạng chuỗi theo response, tránh để bảng tính hoặc parser tự sửa trước khi có bước xác nhận.
Gửi yêu cầu và lưu nguyên response
Ví dụ không dùng thông tin đăng nhập và không tải nội dung capture. Khi chạy tác vụ thật, nhận diện công cụ và tần suất cần phù hợp hướng dẫn dịch vụ. Nếu gặp lỗi giới hạn hoặc quá tải, lưu trạng thái rồi dừng hay thử lại có chờ theo quy trình; không mở nhiều tuyến mạng để né kiểm soát.
from pathlib import Path
import json
import requests
endpoint = 'https://web.archive.org/cdx/search/cdx'
params = {'url': 'example.com/', 'output': 'json',
'fl': 'timestamp,original,statuscode,digest',
'filter': 'statuscode:200', 'collapse': 'digest', 'limit': 3}
r = requests.get(endpoint, params=params,
headers={'User-Agent': 'ArchiveMetadataLab/1.0'},
timeout=(10, 45))
r.raise_for_status()
data = r.json()
Path('cdx-response.json').write_text(
json.dumps(data, ensure_ascii=False, indent=2), encoding='utf-8')
Lần kiểm phục vụ bài nhận HTTP 200 và ba dòng dữ liệu cho truy vấn nhỏ này. Kết quả đã được lưu để chạy phép chuyển đổi offline. Đây là kiểm tra đường lấy metadata cùng parse JSON; chưa phải phép thử tải lớn, phân trang toàn bộ hay khả năng replay từng capture.
Nếu HTTP thành công nhưng JSON không có dạng dự kiến, pipeline phải coi đó là tình huống cần kiểm. Không nên bọc mọi lỗi trong except rồi xuất một CSV rỗng giống như truy vấn không có kết quả. Báo cáo cần phân biệt không có dòng hợp lệ với việc ứng dụng chưa đọc được response.
Đọc header thay vì đoán vị trí
Với dạng response JSON mẫu, hàng đầu cung cấp tên trường. Bộ chuyển đổi dùng hàng đó để lập dict và kiểm số cột. Điều này giúp phát hiện các trường hợp dữ liệu không khớp cấu trúc thay vì cắt bỏ phần dư hoặc dồn giá trị sang cột sai mà không có thông báo.
import csv
import json
from datetime import datetime
from pathlib import Path
data = json.loads(Path('cdx-response.json').read_text(encoding='utf-8'))
expected = ['timestamp', 'original', 'statuscode', 'digest']
if not data or data[0] != expected:
raise ValueError('Unexpected CDX header')
rows = []
for values in data[1:]:
if len(values) != len(expected):
raise ValueError('Unexpected CDX row width')
row = dict(zip(expected, values))
stamp = row['timestamp']
if len(stamp) != 14 or not stamp.isdigit():
raise ValueError('Unexpected timestamp')
datetime.strptime(stamp, '%Y%m%d%H%M%S')
rows.append(row)
with open('captures.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=expected)
writer.writeheader()
writer.writerows(rows)
Việc parse timestamp kiểm định dạng ngày giờ trong mẫu đã chọn, chưa xác minh nội dung capture đúng với kỳ vọng của người nghiên cứu. Nếu cần thêm một cột thời gian để báo cáo, nên đặt tên rõ và giữ timestamp gốc. Không thay timestamp bằng ngày hôm nay chỉ vì đây là ngày chạy chương trình.
CSV cần đọc lại để so số dòng và từng trường với dữ liệu trước khi ghi. Với mẫu nhỏ, kiểm bằng tay một dòng giúp phát hiện lỗi mất URL hoặc digest. Với lô lớn, có thể thêm kiểm tra tự động theo hợp đồng, nhưng số dòng khớp vẫn chưa đủ chứng minh mọi giá trị ở đúng cột.
Internet Archive CDX API với digest và lịch sử capture
Digest hữu ích để tổ chức danh mục và chọn những ứng viên cần xem tiếp. Tuy nhiên câu hỏi về nội dung khác nhau và câu hỏi về mọi thời điểm capture không giống nhau. Nếu chỉ giữ một dòng đại diện, cần nói rõ đã làm mất những thời điểm nào và vì sao phù hợp mục tiêu.

JSON chỉ mục chuyển thành bảng CSV
Hiểu thao tác collapse trước khi sử dụng
Tài liệu server mô tả collapse trên các dòng kề nhau theo trường được chọn. Vì vậy collapse=digest không nên được diễn giải là bảo đảm loại mọi digest trùng ở mọi vị trí của một tập kết quả tùy ý. Khi cần nhóm toàn bộ file đã nhận, đó là bước xử lý phía client với hợp đồng riêng.
Trong mẫu live, collapse được dùng để giảm mật độ ứng viên cho bài minh họa. Bản xuất này không phục vụ thống kê toàn bộ lần capture. Nếu người nhận cần dòng thời gian đầy đủ theo phạm vi trả về, nên lập bản xuất khác không áp dụng cách rút gọn đó và lưu rõ thông số của từng bản.
Nhóm fixture để thấy thông tin bị mất
Fixture tự tạo có ba capture cho cùng URL, hai dòng đầu dùng digest A và dòng sau dùng B. Nhóm theo cặp original cùng digest còn hai nhóm nội dung theo quy tắc fixture. Các ký tự A và B chỉ là nhãn minh họa, không phải digest được đo từ trang thật.
captures = [
{'original': 'https://lab.invalid/', 'timestamp': '20260101000000', 'digest': 'A'},
{'original': 'https://lab.invalid/', 'timestamp': '20260201000000', 'digest': 'A'},
{'original': 'https://lab.invalid/', 'timestamp': '20260301000000', 'digest': 'B'},
]
groups = {}
for row in captures:
key = (row['original'], row['digest'])
groups.setdefault(key, []).append(row['timestamp'])
assert len(captures) == 3 and len(groups) == 2
Nếu chỉ giữ timestamp đầu tiên của mỗi nhóm, bảng cuối sẽ không thể trả lời đã nhận bao nhiêu thời điểm cho digest A. Vì thế nên giữ danh sách timestamp hoặc bảng capture gốc ở cạnh bảng nhóm. Cách lưu này giúp tái lập phép rút gọn mà không phải gọi dịch vụ lại chỉ để phục hồi dữ liệu đã bỏ.
Nhóm theo digest một mình còn có thể gộp các URL khác nhau trong cùng danh mục. Điều đó có thể hữu ích khi khảo sát nội dung tương đồng, nhưng không phù hợp nếu cần giữ lịch sử của từng URL. Khóa nhóm phải theo câu hỏi nghiệp vụ, không theo cột nào thuận tiện nhất để viết một dòng mã.
Internet Archive CDX API với trạng thái và thời điểm đúng nghĩa
Statuscode trong chỉ mục liên quan capture được ghi nhận, không phải response hiện tại khi người dùng mở URL gốc. Tương tự, thời điểm capture không tự là ngày xuất bản của bài viết. Báo cáo cần dùng những tên cột đủ cụ thể để người đọc không ghép hai mốc khác nhau thành một câu chuyện lịch sử sai.
Tách ngày lấy chỉ mục và ngày capture
Một lần chạy hôm nay có thể nhận metadata của nhiều năm trước. Nên lưu fetched_at cho lần lấy cùng timestamp của capture, mỗi trường có định nghĩa riêng. Khi kiểm cập nhật, fetched_at trả lời lúc pipeline quan sát chỉ mục; timestamp trả lời mốc capture của dòng được dịch vụ trả về.
Nếu cần biết ngày xuất bản bài viết, phải kiểm nguồn nội dung phù hợp và mức tin cậy của metadata trong trang. CDX không tự cung cấp câu trả lời đó chỉ vì có timestamp. Một website đổi URL hoặc đưa nội dung cũ sang trang mới cũng có thể làm lịch sử URL khác lịch sử bài viết.
Báo cáo thiếu dữ liệu có giới hạn
Một giai đoạn không thấy capture trong tập đã nhận cần được mô tả là khoảng không có dòng theo truy vấn đó. Không dùng khoảng trống để khẳng định trang ngừng hoạt động liên tục. Thiếu capture có nhiều cách giải thích và pipeline hiện tại chưa kiểm trực tiếp tình trạng của website trong từng ngày lịch sử.
Nếu thay đổi bộ lọc làm một số dòng biến mất, lưu phiên bản tham số để giải thích. Ví dụ bản chỉ giữ trạng thái 200 có thể khác bản bao gồm redirect dù cùng URL và giai đoạn. Đó là khác biệt hợp đồng xuất, chưa phải bằng chứng chỉ mục nguồn bị xóa dữ liệu.
Internet Archive CDX API khi mở rộng danh mục có kiểm soát
Mẫu ba dòng chỉ giải quyết bước thử định dạng. Với một phạm vi lớn, cần thiết kế cách tiếp tục, checkpoint và kiểm lặp theo khả năng của triển khai thực tế. Bài không đưa ra mã phân trang hoàn chỉnh vì chưa chạy và xác minh một chuỗi nhiều trang trên dịch vụ trong ca kiểm này.

Capture và nhóm digest có độ hạt khác nhau
Không coi limit là tổng số hiện có
Nhận đúng ba dòng khi limit bằng ba chỉ chứng minh kết quả trả trong giới hạn yêu cầu. Không được ghi tổng số capture bằng ba nếu chưa có phương pháp đếm phù hợp. Ngay cả việc nhận ít hơn giới hạn cũng cần xem phạm vi, bộ lọc và cấu trúc response trước khi đưa ra kết luận về toàn bộ dữ liệu.
Khi dùng cơ chế tiếp tục được dịch vụ hỗ trợ, hãy lưu trạng thái sau khi phần dữ liệu tương ứng đã được ghi và kiểm. Nếu checkpoint đi trước dữ liệu, tác vụ chạy lại có thể bỏ qua phần chưa lưu. Nếu checkpoint đi sau, cần quy tắc xử lý lại an toàn để tránh tạo bản ghi trùng trong kho đích.
Tách khóa capture và khóa nhóm nội dung giúp xử lý lại rõ ràng hơn. Khóa capture có thể cần URL, timestamp cùng các trường bổ sung theo hợp đồng; khóa nhóm phục vụ câu hỏi khác. Đừng dùng khóa nhóm để ghi đè bảng capture nếu sau này còn cần thống kê thời gian xuất hiện.
Lỗi mạng cần được ghi thành trạng thái
Nếu request bị timeout, giữ thông tin tham số và số lần thử để lần sau biết phần nào chưa hoàn tất. Không ghi một file thành công trống lên bản xuất tốt trước đó. Có thể dùng thư mục lần chạy riêng và chỉ công bố bản mới khi các bước cần thiết đã hoàn tất theo tiêu chí đặt trước.
Trong môi trường cần tuyến kết nối được quản lý, nhu cầu mua proxy nên gắn với cấu hình mạng cụ thể. Nó không thay đổi quyền truy cập bản lưu hoặc tính đầy đủ của chỉ mục. Ca kiểm bài này không chạy qua proxy và không đo tốc độ hay độ ổn định của một dịch vụ proxy nào.
Internet Archive CDX API với hồ sơ kiểm và bảng bàn giao
Hồ sơ minh họa có response JSON của một GET công khai, CSV chuyển đổi và fixture nhóm ba capture thành hai nhóm. Nó đủ để kiểm các thao tác được trình bày trên mẫu nhỏ. Chưa có phép kiểm tải HTML capture, replay tài nguyên, phân trang dài hoặc đối chiếu digest với nội dung tải lại.

Hồ sơ kiểm trước khi xem bản lưu
Mục kiểm |
Kết quả trong mẫu |
Điều chưa chứng minh |
|---|---|---|
Kết nối |
Một GET trả HTTP 200 |
Khả năng tải lớn |
Parse |
Header và dòng hợp lệ |
Mọi biến thể response |
CSV |
Giữ bốn trường đã chọn |
Nội dung trang lưu |
Nhóm fixture |
Ba capture thành hai nhóm |
Khử trùng toàn bộ chỉ mục |
Đối chiếu một URL từ yêu cầu đến bảng
Trước hết kiểm tham số url và phạm vi thực sự gửi đi. Sau đó chọn một dòng JSON để so original trong CSV. Nếu URL khác với kỳ vọng, hãy tìm nguyên nhân ở phạm vi hoặc chuẩn hóa trước khi kết luận server trả nhầm; một truy vấn host rộng hơn có thể hợp lệ nhưng không đúng câu hỏi ban đầu.
Tiếp theo kiểm timestamp và statuscode được giữ nguyên như response. Nếu bảng tính tự đổi timestamp sang số hoặc ký hiệu khoa học, hãy xem file gốc bằng công cụ đọc CSV để phân biệt lỗi hiển thị với lỗi ghi. Không sửa nguồn chỉ để phù hợp một cách hiển thị mặc định của ứng dụng văn phòng.
Cuối cùng kiểm digest còn ở đúng cột và bản xuất đã ghi việc collapse. Người đọc cần biết số dòng phản ánh tập đã rút gọn. Một bảng đẹp nhưng thiếu mô tả bộ lọc có thể khiến người dùng suy ra tần suất capture không đúng, dù mã Python đọc và ghi dữ liệu không có lỗi.
Chọn capture để xem tiếp theo mục tiêu
Nếu mục tiêu là tìm một giao diện ở một giai đoạn, có thể chọn ứng viên gần mốc cần kiểm từ danh mục phù hợp. Sau đó mới đánh giá bản lưu và tài nguyên liên quan. Việc chọn một dòng theo timestamp không tự bảo đảm nội dung của trang đáp ứng câu hỏi về thiết kế, bài viết hay chức năng tại mốc đó.
Nếu mục tiêu là so thay đổi nội dung, cần xác định có so văn bản chính, toàn HTML hay một vùng cụ thể. Digest chỉ mục không thay thế tiêu chí so do nhóm định nghĩa. Hai capture được nhóm cùng digest vẫn cần được diễn giải theo dữ liệu và mục đích kiểm, không biến thành tuyên bố rằng mọi biểu diễn người dùng thấy đều giống nhau.
Đối với website do mình quản lý, có thể kết hợp danh mục với kho bản sao nội bộ có nguồn rõ ràng. Hai nguồn cần được giữ nhãn xuất xứ riêng. Một file từ backup nội bộ và một capture công khai không nên được ghép thành cùng một bằng chứng chỉ vì cùng URL và gần ngày nhau.
Giữ quyền sử dụng tách khỏi khả năng tra cứu
Việc nhìn thấy chỉ mục hoặc truy cập một bản lưu không tự trao quyền tái bản nội dung vào website khác. Trước khi dùng lại văn bản hay hình ảnh, cần kiểm quyền phù hợp mục đích. Pipeline của bài chỉ lập danh mục metadata và chưa thực hiện một chiến dịch phục hồi hoặc công bố nội dung lưu trữ.
Khi bàn giao, nên ghi rõ người nhận được một bảng ứng viên để kiểm tiếp. Nếu có URL nhạy cảm trong phạm vi do tổ chức quản lý, chỉ giữ và chia sẻ lượng metadata cần thiết theo quy trình của tổ chức. Không mở rộng bảng sang dữ liệu ngoài nhiệm vụ chỉ vì một truy vấn rộng có thể trả thêm nhiều dòng.
Kiểm thử lại mà không phụ thuộc dữ liệu live
Response đã lưu có thể dùng làm fixture cho phép đọc header và xuất CSV. Tạo thêm bản fixture sai số cột để bảo đảm chương trình dừng với thông báo dễ hiểu. Cách kiểm này nhắm vào lỗi parser do mình quản lý, không làm thêm nhiều yêu cầu ra dịch vụ chỉ để thử một nhánh lỗi có thể tái tạo offline.
Một fixture khác có thể giữ header đúng nhưng không có dòng dữ liệu. Pipeline cần quyết định có xuất CSV chỉ gồm header và trạng thái no_results hay không. Dù chọn cách nào, trạng thái ấy phải khác lỗi mạng, lỗi parse hoặc lần chạy bị ngắt giữa chừng để người vận hành không đưa ra hành động sai.
Với fixture digest, thêm trường hợp A, B, A giúp người kiểm thấy khác biệt giữa nhóm toàn bộ phía client và collapse các dòng kề nhau phía server. Trong bài chỉ đã chạy bộ ba A, A, B; trường hợp bổ sung là đề xuất kiểm tiếp, không được trình bày thành một phép thử thực tế đã hoàn thành.
Lưu bản xuất có phiên bản và có nguồn
Tên bản xuất nên gắn với lần chạy hoặc một mã tác vụ để tránh ghi đè các danh mục có bộ lọc khác nhau. Bên cạnh CSV, lưu endpoint, params, fetched_at và response gốc. Khi có tranh luận về một hàng, người nhận có thể lần lại đúng yêu cầu đã tạo ra nó thay vì so với response mới đã thay đổi.
Nếu cần chỉnh quy tắc nhóm, hãy tạo một bảng dẫn xuất mới từ bản gốc. Không sửa tay digest hoặc timestamp để làm các nhóm khớp mong muốn. Một thay đổi như vậy sẽ làm mất khả năng kiểm dữ liệu nguồn và khiến lần chạy sau không tái lập được bản đã bàn giao.
Trước khi công bố số liệu tổng hợp, kiểm đơn vị đếm của từng cột. Số capture, số URL và số nhóm digest là ba chỉ số khác nhau. Chúng có thể cùng xuất hiện trong báo cáo, nhưng cần tên rõ ràng và định nghĩa đi kèm để người đọc không coi chúng là những cách gọi khác của cùng một số lượng.
Khi cập nhật định kỳ, hãy so danh mục theo cùng phạm vi và lưu cả những lần không có thay đổi. Sự ổn định của một bảng nhỏ chỉ cho thấy tập quan sát hiện tại không đổi theo hợp đồng, chưa chứng minh toàn bộ lịch sử website bất biến. Cách diễn giải có giới hạn giúp bản báo cáo hữu ích mà không phóng đại bằng chứng.
Đối chiếu công cụ chuyển đổi trong môi trường chạy
Phần ghi bảng dùng csv của Python để bảo toàn ranh giới trường thay vì tự nối dấu phẩy. Nếu bước sau mở bằng phần mềm khác, hãy kiểm một URL có query string hoặc dấu phẩy trong fixture riêng. Việc một bảng có vẻ đúng khi nhìn nhanh không thay thế phép đọc lại theo đúng định dạng.
Phần kiểm ngày dùng datetime của Python để phát hiện ngày giờ không hợp lệ theo định dạng đã chọn. Một chuỗi đủ mười bốn chữ số vẫn có thể chứa tháng không tồn tại. Vì vậy kiểm độ dài và chỉ gồm chữ số cần đi cùng bước parse ngày, không nên được xem là hai kiểm tra tương đương.
Khi tự xây liên kết tra cứu, nên dùng hàm xử lý tham số trong urllib.parse hoặc params của thư viện HTTP. Đưa nguyên một URL có ký tự đặc biệt vào chuỗi query bằng phép nối tay có thể làm phạm vi yêu cầu khác với ý định. Lưu URL yêu cầu đã chuẩn bị giúp kiểm lại vấn đề ấy mà không phải đoán từ mã nguồn.
Các bước kiểm này phục vụ chất lượng pipeline do mình quản lý. Chúng không xác nhận tính đầy đủ của kho lưu trữ và cũng không thay cho đánh giá quyền dùng lại nội dung. Khi báo cáo kết quả, nên nêu cả kiểm định dạng đã qua và các bước nội dung chưa làm để người nhận biết dùng bảng đến đâu.
Ghi nhớ: CDX giúp lập danh mục capture; muốn kết luận về nội dung phải kiểm bước tiếp theo.
Anh em hãy lưu dữ liệu mẫu cùng cấu hình và kết quả đối chiếu để lần cập nhật sau có cơ sở kiểm lại. Tham khảo thêm tại Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam. Bắt đầu từ phạm vi nhỏ và tiêu chí rõ ràng khi triển khai Internet Archive CDX API.