2013-01-23 17 views
6

Tôi đang cố đăng nhập vào một trang web bằng cách sử dụng plugin WebBrowser của PHPQuery. Tôi có thể đăng nhập thành công nhưng tôi không chắc chắn cách sử dụng lại cookie từ cuộc gọi trước đó đến lần tiếp theo.Trình cắm WebBrowser của PHPQuery - sử dụng cookie

$client = phpQuery::browserGet('https://website.com/login', 'success1'); 

function success1($browser) { 
    $handle = $browser 
    ->WebBrowser('success2'); 
    $handle 
    ->find('input[name=name]') 
     ->val('username'); 
    $handle 
    ->find('input[name=pass]') 
     ->val('password') 
     ->parents('form') 
     ->submit(); 
} 

function success2($browser) { 
    print $browser; // prints page showing I'm logged in 

    // make authenticated requests here 
} 

Làm cách nào để thực hiện các yêu cầu khác với cookie phiên/đăng nhập?

+0

Thật không may tôi không nghĩ rằng nó có thể với plugin này, nhưng nếu bạn có thể giải thích mục tiêu của bạn, chúng tôi có thể gửi cho bạn theo một hướng khác có thể làm việc cho bạn. Ví dụ, bạn cũng có thể sử dụng 'CURL' để đăng nhập vào một trang bên ngoài và duy trì trạng thái đăng nhập. Một cái gì đó giống như 'HTML đơn giản DOM' có thể được sử dụng để phân tích các kết quả và thực hiện các yêu cầu theo dõi –

Trả lời

3

Tôi đã xem xét mã nguồn để hỗ trợ bạn về vấn đề này. Ấn tượng đầu tiên của tôi là đoạn mã được viết rất kém. Bạn có thể muốn xem xét chuyển sang một giải pháp khác trong thời gian dài vì nếu tác giả thay đổi một cái gì đó trong mã này, bạn có thể sẽ có mã bị hỏng với bản nâng cấp.

Điều đó đang được nói, plugin WebBrowser cung cấp cho bạn quyền truy cập vào chính đối tượng trình duyệt, chứa một hàm có tên là getLastResponse(). Điều này trả về một đối tượng Zend_Http_Response, mà bạn có thể về mặt lý thuyết sử dụng để lấy các cookie.

Vấn đề là bạn không có bất kỳ cách nào để đặt các cookie đó. Bạn sẽ phải vá các trình duyệt web plug-in ở đâu đó xung quanh dòng 102 để bao gồm đối tượng yêu cầu HTTP riêng của bạn (tham số 2 cho phpQuery::ajax()) với cookie của bạn được thiết lập, xung quanh đây:

$xhr = phpQuery::ajax(array(
    'type' => 'GET', 
    'url' => $url, 
    'dataType' => 'html', 
)); 

Hoặc bạn cũng có thể vá phpQuery.php dòng 691 đến bao gồm một bình cookie toàn cầu, bạn có thể định nghĩa như một singleton hay như vậy. (Đúng nơi nó nói $client->setCookieJar();).

Một lần nữa, mã này rất kém được viết, bạn có thể MUCH tốt hơn khi sử dụng raw curl calls, ngay cả khi nó thiếu một chút chức năng.

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