2011-07-20 57 views
5

Tôi đã đấu tranh với việc đăng nhập vào Wordpress một lúc với CURL (PHP). Tôi nghĩ rằng tôi đã thử mọi thứ, nhưng có vẻ như tôi đã bỏ lỡ điều gì đó. Tôi không thể lấy CURL để lưu Cookies khi đăng nhập. Điều kỳ lạ, là mặc dù tôi không thể lưu cookie để lưu trữ, mọi thứ vẫn hoạt động nhiều hơn hoặc ít hơn, ngoại trừ Nâng cấp Worpdress Plugins (đó là những gì tôi đang làm việc trên hiện tại). Tôi có thể đăng nhập để wordpress, và tôi thậm chí có thể thiết lập một ugprade tự động preg_matching liên kết và curling vào nó - Wordpress lõi nâng cấp không có vấn đề, nhưng đối với một số lý do khi nói đến plugins - Tôi chỉ không thể làm điều đó. Tôi đã có một LOT đoán đêm qua, nơi vấn đề nằm, nhưng không có gì đã làm. Bây giờ khi tôi quyết định so sánh các cookie tôi nhận được từ CURL và trong FireFox - nó chỉ ra rằng không có cookie từ CURL.CURL không lưu cookie (PHP)

Được rồi, Vì vậy, ở đây tôi đặt Tùy chọn (đừng bận tâm đến nội dung nhận xét, tôi đã kiểm tra mọi thứ để nhận xét và đưa chúng vào ...).

$cookieFile = 'cookies.txt'; 
$channel = curl_init(); 

curl_setopt_array($channel, array (
    CURLOPT_SSL_VERIFYPEER => FALSE, 
    CURLOPT_TIMEOUT => 60, 
    CURLOPT_FOLLOWLOCATION => 1, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_COOKIEFILE => $cookieFile, 
    CURLOPT_COOKIEJAR => $cookieFile, 
    CURLOPT_AUTOREFERER => true, 
    CURLOPT_POSTFIELDS => $loginPostData, 
    CURLOPT_POST => 1, 
    #CURLOPT_FRESH_CONNECT => 1 
    #CURLOPT_FAILONERROR => 1 
)); 
    # curl_setopt ($channel, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
# 
# Shorten curl_exec for our $channel 
# 
function copen($openUrl, $custom = FALSE) { 
global $channel;global $siteUrl; 
if($custom) {$siteUrl = "";} 
curl_setopt ($channel, CURLOPT_URL, $siteUrl.$openUrl); 
$result = curl_exec ($channel) or die(curl_error($channel)); 
echo "<h3> Opening: $openUrl </h3>"; 
return $result; 
} 

Vì vậy, tôi đã làm một tìm kiếm, và cố gắng để có được các tập tin cookie, và thất bại với điều này:

 preg_match('/^Set-Cookie: (.*?);/mi', $result, $m); 
    echo(parse_url($m[1])); 

Tôi cũng đã cố gắng lặp lại $ cookieFile với file_get_contents() - trống. Tôi đã kiểm tra các tập tin khoảng 15 lần bây giờ - nó là một tập tin có thể ghi 777. Tôi đã thử viết cho nó với file_put_contents() và đã thành công, do đó, có lỗi ở vị trí tệp và/hoặc quyền. Tôi rõ ràng là thiếu một cái gì đó, tôi chỉ không thể nhìn thấy nó.

Trân trọng :)

Trả lời

1

OK, Vì vậy, tôi đã tìm ra giải pháp. Sau khi kết hợp liên kết để thu thập dữ liệu với preg_match() từ nội dung HTML, trước tiên bạn cần thoát khỏi liên kết (vì lý do chưa được biết đến). Chúng tôi thực hiện việc này với: html_entity_decode ($ match)

0

i Vâng đã thực hiện một bot web năm ngoái và đó là đoạn code mà tôi đã sử dụng: tôi nhớ rất rõ rằng kịch bản hoạt động 100%. Tất nhiên tôi có một chức năng kiểm tra nếu tôi đăng nhập và nếu im thì không đăng nhập();

function init($username,$password,$mainurl){ 
    global $curl; 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_HEADER, 0); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, "$username"); 
    curl_setopt($curl, CURLOPT_COOKIEJAR, "$username"); 

    login($curl,$username,$password,$mainurl); 
} 
function login($curl,$username,$password,$mainurl){ 
    $logindata="some_login_data"; 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($curl, CURLOPT_URL, "SITE LOGIN PAGE URL"); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $logindata); 
    return curl_exec($curl); 
} 
+0

Bạn có thể giữ cookie/phiên trực tiếp sau khi đăng nhập bằng cách này không? Có nghĩa là - Bạn có thể thu thập thông tin một trang sau khi đăng nhập mà không cần đăng nhập lại không? – Norris

+0

có cookie được lưu trong trình duyệt. Và bạn không cần đăng nhập khác (chỉ khi bạn đóng trình duyệt hoặc cookie hết hạn) – TreantBG

+0

Được rồi, vậy tôi nghĩ tôi biết vấn đề tôi đang gặp phải là gì! - Những gì tôi đang cố gắng làm cho PHP chính nó là CURL Trang, mà không cần mở nó trong trình duyệt của tôi! Tuy nhiên tôi không biết một sửa chữa cho điều này ... – Norris

6

Để một số người khác kiểm tra xem bạn có đang sử dụng đường dẫn tuyệt đối tuyệt đối vào cookie không!

'C: \ wamp \ www \ cookie.txt'

thay vì:

'cookie.txt'

curl_setopt($curl, CURLOPT_COOKIEFILE, 'C:\wamp\www\cookie.txt'); 
curl_setopt($curl, CURLOPT_COOKIEJAR, 'C:\wamp\www\cookie.txt'); 
1

Expierenced cùng một vấn đề và giải quyết nó với gọi curl_close() cuối cùng. Nếu thiếu, cookie sẽ không được lưu.

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