2009-07-04 41 views
9

Tôi muốn tạo một tập lệnh php có thể chụp một trang từ một trang web. Hãy suy nghĩ file_get_contents ($ url).file_get_contents từ url chỉ có thể truy cập được sau khi đăng nhập vào trang web

Tuy nhiên, trang web này yêu cầu bạn điền vào biểu mẫu đăng nhập tên người dùng/mật khẩu trước khi bạn có thể truy cập bất kỳ trang nào. Tôi tưởng tượng rằng khi đã đăng nhập, trang web sẽ gửi cho trình duyệt của bạn một cookie xác thực và với mọi yêu cầu trình duyệt hậu quả, thông tin phiên được chuyển trở lại trang web để xác thực quyền truy cập.

Tôi muốn biết cách tôi có thể mô phỏng hành vi này của trình duyệt bằng tập lệnh php để truy cập và chụp một trang từ trang web này.

Cụ thể hơn, câu hỏi của tôi là:

  1. Làm thế nào để gửi một yêu cầu rằng chứa log-in chi tiết của tôi để website trả lời với phiên thông tin/Cookie
  2. Làm thế nào để tôi đọc phiên thông tin/cookie
  3. Làm cách nào để tôi trả lại phiên này thông tin với mọi hậu quả yêu cầu (file_get_contents, curl) đến trang web.

Cảm ơn.

Trả lời

15

Curl khá phù hợp để làm điều đó. Bạn không cần phải làm bất kỳ điều gì đặc biệt khác ngoài việc đặt các tùy chọn CURLOPT_COOKIEJARCURLOPT_COOKIEFILE. Khi bạn đã đăng nhập bằng cách chuyển các trường biểu mẫu từ trang web, cookie sẽ được lưu và Curl sẽ tự động sử dụng cùng một cookie đó cho các yêu cầu tiếp theo như ví dụ bên dưới minh họa.

Lưu ý rằng chức năng dưới đây lưu cookie vào cookies/cookie.txt để đảm bảo rằng thư mục/tệp tồn tại và có thể ghi vào đó.

$loginUrl = 'http://example.com/login'; //action from the login form 
$loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values 
$remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save 

$login = getUrl($loginUrl, 'post', $loginFields); //login to the site 

$remotePage = getUrl($remotePageUrl); //get the remote page 

function getUrl($url, $method='', $vars='') { 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); 
    } 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt'); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt'); 
    $buffer = curl_exec($ch); 
    curl_close($ch); 
    return $buffer; 
} 
+0

này hoạt động một điều trị cho những gì tôi muốn - nhờ – Chris

+0

Rất thích cho tiện làm việc cho tôi, nhưng nó không phải là = ( – Brade

+0

không làm việc cho tôi quá –

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