PHP get_headers: gửi yêu cầu HTTP HEAD qua proxy
Truyền ngữ cảnh luồng trực tiếp cho get_headers, chọn HEAD có chủ đích và quyết định có theo các chuyển hướng hay không.
Trong PHP, get_headers() nhận một ngữ cảnh luồng làm đối số thứ ba. Trên PHP 8, một lần kiểm tra tiêu đề cho URL HTTP có thể mang cấu hình proxy riêng:
$context = stream_context_create([
'http' => [
'proxy' => 'tcp://proxy.example.net:8080',
'request_fulluri' => true,
'method' => 'HEAD',
'follow_location' => 0,
'timeout' => 10,
],
]);
$headers = get_headers('http://example.net/file.zip', false, $context);
if ($headers === false) {
throw new RuntimeException('Header request failed');
}Proxy là một điểm cuối TCP cho trình bao luồng HTTP. Hãy thay máy chủ và cổng giữ chỗ của nó bằng một ứng viên không xác thực từ danh sách proxy HTTP cho lần kiểm tra HTTP công khai này. request_fulluri cung cấp URI đích đầy đủ trong dòng yêu cầu HTTP, như nhiều proxy chuyển tiếp mong đợi. Ngữ cảnh này thuộc về lần gọi này; nó không thay đổi ngữ cảnh mặc định mà các lần đọc URL khác dùng.
Bất chấp tên của hàm, phương thức yêu cầu mặc định của nó là GET. Phương thức HEAD rõ ràng yêu cầu máy chủ cung cấp siêu dữ liệu phản hồi mà không có phần thân phản hồi tương ứng. Máy chủ có thể từ chối HEAD hoặc xử lý khác đi, vì vậy một lần kiểm tra tiêu đề thành công không chứng minh rằng lần tải xuống sau đó sẽ thành công.
Ở đây, việc theo chuyển hướng bị tắt để kiểm tra phản hồi đầu tiên. Khi đó tiêu đề Location và trạng thái chuyển hướng là những kết quả hữu ích thay vì chỉ dẫn lấy một URL khác. Nếu lần kiểm tra cần theo chuyển hướng, hãy thay đổi chính sách đó một cách có chủ đích và tính đến các tiêu đề phản hồi bổ sung.
Đối số false giữ một mảng tiêu đề có chỉ mục. Dùng true khi việc phân tích kết hợp hữu ích hơn.