2012-03-15 52 views
5

Tôi đang kết nối với dịch vụ API xác thực người dùng bằng cookie. Tôi thực hiện hai câu lệnh này từ dấu nhắc lệnh và nó hoạt động.Đọc Cookie khi sử dụng Curl trong php, làm cách nào?

curl -d "u=username&p=password" -c ~/cookiejar https://domain/login 

curl -b https://domain/getData 

Bây giờ tôi muốn thực hiện hai tập tin php tương đương login.phpget_data.php sử dụng curl.

Tôi đang sử dụng

curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 

trong login.php

curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 

trong get_data.php

Nó không phải là làm việc. Tệp cookie đang được tạo nhưng curl thứ hai không đọc được. Đây có phải là cách phù hợp để làm điều đó không? Tôi có phải đọc tệp cookie một cách riêng biệt và đặt tiêu đề Cookie không? Bất kỳ trợ giúp sẽ đánh giá cao. Cảm ơn.

+0

Tốt nhất là nên đặt cả hai tùy chọn cookie, bất kể tập lệnh chỉ đọc hoặc ghi cookie. –

+0

Giá trị tiêu đề 'Cookie' có được tự động thêm vào yêu cầu curl trong' get_data.php' không? – Diode

+0

nếu trường hợp curl cụ thể đó có thể đọc tệp cookie được tạo bởi tập lệnh khác, thì có. –

Trả lời

14

Điều này sẽ thực hiện thủ thuật. Tôi chạy Google.com như một ví dụ:

<?PHP 

// open a site with cookies 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.google.com"); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0'); 
curl_setopt($ch, CURLOPT_HEADER ,1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
$content = curl_exec($ch); 

// get cookies 
$cookies = array(); 
preg_match_all('/Set-Cookie:(?<cookie>\s{0,}.*)$/im', $content, $cookies); 

print_r($cookies['cookie']); // show harvested cookies 

// basic parsing of cookie strings (just an example) 
$cookieParts = array(); 
preg_match_all('/Set-Cookie:\s{0,}(?P<name>[^=]*)=(?P<value>[^;]*).*?expires=(?P<expires>[^;]*).*?path=(?P<path>[^;]*).*?domain=(?P<domain>[^\s;]*).*?$/im', $content, $cookieParts); 
print_r($cookieParts); 

?> 

Xem other examples để phân tích cú pháp hiệu quả như chuỗi.

1

là có bất kỳ phương pháp nào để xem các tiêu đề yêu cầu curl. Tôi có thể lấy nó từ dụ curl không? hoặc là có bất kỳ công cụ như fiddler cho Mac (Tôi đang làm việc Mac OS)?

Vâng, bạn có thể lấy tiêu đề yêu cầu như sau:

<?php 
    ... 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); // enable tracking 
    $result = curl_exec($ch); 
    var_dump(curl_getinfo($ch, CURLINFO_HEADER_OUT)); // request headers 
?> 
0

Trong PHP 5.5.0 có vẻ như bây giờ bạn có thể nhận được các tập tin cookie trong một dòng nhưng tôi chỉ nhận lại một mảng trống sử dụng điều này với PHP 7.1.0:

CURLINFO_COOKIELIST - nhận được tất cả các tập tin cookie được biết đến

$cookies = curl_getinfo($curl, CURLINFO_COOKIELIST); 
+0

Tôi cũng gặp phải những vấn đề này, bạn có thể giải quyết chúng để CURLINFO_COOKIELIST xuất ra cookie không? Đối với tôi nó đã được làm việc, nhưng khi tôi mới cập nhật thông qua 'yum update -y' kết quả là luôn luôn có sản phẩm nào. – maddo7

+0

Cố gắng đặt 'curl_setopt ($ ch, CURLOPT_COOKIELIST, mảng (''));' với yêu cầu đầu tiên. Điều này giải quyết nó cho tôi. – maddo7

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