Hướng dẫn php simulate browser - php mô phỏng trình duyệt
Tôi sẽ làm một ví dụ, trước tiên quyết định trình duyệt bạn muốn mô phỏng, trong trường hợp này tôi đã chọn 5 và kiểm tra những vấn đề về nó, điều này có thể được lấy bằng máy chủ Netcat đơn giản (MacOS Bundles Netcat, hầu hết các bản phân phối Linux Netcat và người dùng Windows có thể nhận Netcat từ .. Cygwin.org, trong số những nơi khác), Show Thiết lập máy chủ Netcat để nghe trên cổng 9999: 6Bây giờ đánh http://127.0.0.1:9999 trong Firefox, tôi nhận được:
Bây giờ chúng ta hãy so sánh điều đó với tập lệnh đơn giản này:
tôi có:
Có một số tiêu đề còn thiếu ở đây, tất cả chúng đều có thể được thêm vào tùy chọn Curlopt_httpheader của Curl_Setopt, nhưng 7 đặc biệt nên được đặt bằng curlopt_useragent thay thế trên các chuyển hướng HTTP cũng vậy) và tiêu đề 8 phải được đặt bằng curlopt_encoding thay thế (nếu chúng được đặt bằng curlopt_encoding thì curl sẽ tự động giải nén phản hồi nếu máy chủ chọn nén, nhưng nếu bạn đặt nó qua curlopt_htpheader thì bạn phải tự phát hiện và giải nén nội dung theo cách thủ công, đó là một nỗi đau ở mông và hoàn toàn không cần thiết, nói chung là nói) vì vậy thêm những người chúng ta nhận được:
Bây giờ đang chạy mã đó, máy chủ Netcat của chúng tôi nhận được:
và Voila! 9 nhận được yêu cầu của chúng tôi bây giờ sẽ không thể phân biệt được với yêu cầu Firefox thực sự :)Phần tiếp theo này chỉ là nitpicking, nhưng nếu bạn nhìn rất chặt chẽ, bạn sẽ thấy rằng các tiêu đề được xếp theo thứ tự sai, Firefox đặt tiêu đề 8 trong dòng 6 và yêu cầu Get được mô phỏng của chúng tôi đặt nó vào dòng 3 .. cho đến Khắc phục điều này, chúng ta có thể tự đặt tiêu đề mã hóa được kiểm tra theo đúng dòng,
Chạy điều đó, máy chủ Netcat của chúng tôi nhận được:
Vấn đề đã được giải quyết, bây giờ các tiêu đề thậm chí theo đúng thứ tự và yêu cầu dường như hoàn toàn không thể phân biệt được với yêu cầu Firefox thực sự :) (Tôi thực sự không đề xuất bước cuối cùng này, đó là một gánh nặng bảo trì để giữ cho curlopt_encoding đồng bộ với Tiêu đề mã hóa chấp nhận tùy chỉnh và tôi chưa bao giờ trải qua một tình huống trong đó thứ tự của các tiêu đề là đáng kể)COMPLETELY INDISTINGUISHABLE from the real firefox request :) (i don't actually recommend this last step, it's a maintenance burden to keep CURLOPT_ENCODING in sync with the custom Accept-Encoding header, and i've never experienced a situation where the order of the headers are significant)
Bạn có thể hủy một biến, giá trị ... đã lưu vào Session:
Source code: session_cookie (Git), hoặc tải rphp-sessioncookie Khái niệm CookieLưu Cookie setcookie($name, $value, $expire = 0, $path="", $domain = "", $security = false, $httponly = false);
Lần sau truy cập URL cùng domain (tên miền) browser sẽ gửi ngược các Cookie này lên Server và Server sẽ nhận được Cookie, từ đó xác định được thông tin (như username) ... 6Nên nhớ Cookie được lưu lại ở Browser, sau đó mỗi lần gửi yêu cầu đến Server nó sẽ tự động gửi thông tin này đến Server Thiết lập, lưu Cookie php -S 0.0.0.0:8080 setcookie.php Từ PHP có thể thiết lập Cookie bằng hàm 1 (nhớ phải gọi trước các dòng code xuất html). 2 là tên cookie, tên này được sử dụng để truy cập vào biến 3 để lấy thông tinHoặc dùng lệnh curl để xem header trả về: Truy cập - đọc - CookieBạn dùng biến 3 là một mảng để truy cập thông tin cookie do trình duyệt gửi lên. Giống như 1 bạn nên dùng 2 để kiểm tra sự tồn tại của COOKIE. 3 0Xóa CookieĐể yêu cầu trình duyệt xóa cookie bạn sử dụng chính hàm setcookie với thủ thuật đặt thời gian đã hết hạn. Ví dụ: 1Khái niệm về SessionĐể trao đổi dữ liệu từ trang này qua trang khác (giữa 2 request) thì làm như thế nào? Ví dụ nếu người dùng đã đăng nhập, thì thông tin đăng nhập được lưu lại và chuyển cho các trang khác nhau trong phiên làm việc để tránh mỗi lần gửi request lại phải đăng nhập, hay người dùng chọn đựa mặt hàng vào giỏ hàng thì phải nhớ để chuyển đến trang thanh toán ... PHP có cơ chế để làm việc này đó chính là 4Session là thông tin về phiên làm việc cho từng khách truy cập, trong PHP nó tạo một file trong thư mục tạm (thư mục này cài đặt ở 5) để lưu thông tin này, thông tin này được dùng chung cho tất cả các trang mà khách truy
cập. Mỗi khách truy cập, dựa vào thông tin trình duyệt gửi lên nó tạo (hoặc phục hồi) một Session riêng cho khách đó.Sự làm việc của Session có thể vắn tắt như sau:
Như vậy 4 là cơ chế lưu trữ và phục hồi thông tin cho phiên làm việc (truy cập) của khách, nhằm trao đổi thông tin khi duyệt từ page này sang page khác. Để Session hoạt động thì còn liên quan tới hỗ trợ 7 từ trình duyệt. Ví dụ trong Chrome bạn block Cookie từ facebook, thì bạn không thể đăng nhập được facebook.Chạy Session - Lưu trữ và lấy thông tinSession trong PHP bắt đầu hoạt động sau khi bạn gọi hàm 8, hàm này sẽ phục hồi dữ liệu SESSION nếu đã có, nếu chưa nó sẽ tạo ra SESSION mới cho bạn. Để sử dụng khuyên nên gọi hàm này ngay khi bắt đầu của Page. Một cách khác mà không cần quan tâm đến gọi 8 đó là thiết lập cho PHP tự động chạy hàm này bàng cách 0 trong 1Khi mà hệ thống session trong PHP được chạy, mặc định nó sẽ gửi về trình duyệt một Cookie với tiền tố 2, tất nhiên có thể thay đổi tiền tố này trong php.iniVí dụ trang chạy thử Session 3 2Kiểm tra bạn thấy có Cookie gửi về, cookie này dùng để phục hồi dữ liệu Session Biến toàn cục 4 kiểu mảng là nơi SESSION lưu trữ thông tin - cũng chính là dữ liệu phục hồi được giữa các trang, bạn truy cập biến này trong suốt vòng đời của session để lấy, lưu trữ thông tin. Bạn cũng nên dùng hàm 2 để kiểm tra một biến session nào đó đã có hay chưa. Ví dụ sau dùng SESSION để đếm số lần một khách truy cập vào website. Ví dụ đếm lượt truy cập trang của một khách 6 3 4Trong đoạn code trên có sử dụng 7 để kiểm tra xem Session có tồn tại hay chưa, nếu có rồi mà bạn gọi 8 có thể PHP sẽ cảnh báo lỗi WarningKhi có chạy Session thì dữ liệu trả về cho trình duyệt nó gửi kèm một mẩu tin nhỏ ở phần Header, dữ liệu này là Cookie liên quan đến ID của Session, để request trình duyệt lưu trữ, request tiếp theo nó sẽ gửi dữ liệu này đến Server và PHP sẽ phục hồi Session theo Cookie này. Hủy SessionBạn có thể hủy một biến, giá trị ... đã lưu vào Session:
Từ nắm vững Cookie và Session là cơ sở để xây dựng lên các hệ thống như cho phép user đăng nhập vào website, xây dựng ứng dụng giỏ hàng đặt hàng ... Source code: session_cookie (Git), hoặc tải rphp-sessioncookie |