2012-06-19 3 views
1

Я работаю над созданием веб-искателя, который извлекает данные с веб-сайта, и я почти нахожусь в домашнем stetch, но у меня возникла проблема. Я могу входить в систему/отыскивать файл cookie, но веб-сайт реагирует необычно, когда регистрируется таким образом. (См. Скриншоты)PHP CURL Bot Возможная проблема с печеньем?

Похоже, что файл cookie становится бесполезным после первоначальной загрузки страницы (файл cookie все еще существует, я проверил). Кто-нибудь знает, что я делаю неправильно? Я пробовал искать похожие проблемы безрезультатно.

Код:

<? 
session_write_close(); 
$ch = curl_init(); 
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, getcwd().'/cookie.txt'); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, getcwd().'/cookie.txt'); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_REFERER, "http://www.callofduty.com/"); 
curl_setopt($ch, CURLOPT_URL,"https://profile.callofduty.com/elite/login"); 
curl_exec($ch); 

curl_setopt ($ch, CURLOPT_REFERER, "https://profile.callofduty.com/elite/login"); 
curl_setopt($ch, CURLOPT_URL, 'https://profile.callofduty.com/elite/do_login'); 
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'j_username=USERNAME&j_password=PASSWORD'); 
echo "Initial Dump: <p>"; 
echo curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL,"https://elite.callofduty.com/career/xbox/54d10030cc86b1b9c3162b395d46bffe#/playercardmw3"); 
curl_exec($ch); 
echo "<hr/>Second Dump: <p>"; 
var_dump(curl_getinfo($ch)); 
?> 

Примечание: страница работает немного лучше, если я зарегистрирован регулярно в другом справочном окне. Есть больше информации, которая загружается. Это меня смущает, потому что это не куки-файл, с которым связан скрипт PHP на сервере? O_o

--- ОБНОВЛЕНИЕ --- ОК, я не уверен, почему, потому что я ничего не менял, но теперь, когда я загружаю сайт, он выглядит нормально, просто без информации, которую я хочу (http://gyazo.com/e326f2f4cdac3e6a4a20fdc9afc62f2d.png?1340088915). Тем не менее, это показывает мне, как вышли из системы. (Примечание: Вы не можете просматривать профили при входе, оно заставляет вас к экрану входа в систему)

Вот распечатка для обоих эхо запроса и var_dump: http://gyazo.com/ded134560cdf6c6ecf0b27221f35e32b.png?1340110136

Насколько я могу сказать , хотя я получил cookie, сайт все еще думает, что я вышел из системы.

Заранее благодарен!

+0

способ украсть других народов IP. –

+0

Никаких IP-адресов не было украдено. Я просто искал «Joe» в качестве тестового профиля, и это первое, что появилось: P – user1462569

+0

Я должен уточнить, IP в этом случае является интеллектуальной собственностью. –

ответ

2

вам необходимо указать cookie, когда вы переходите на другие части веб-сайта, чтобы сделать что-то вроде этого.

function login(){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//add this line 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//add this line 
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
    curl_setopt ($ch, CURLOPT_COOKIEJAR, getcwd().'/cookie.txt'); 
    curl_setopt ($ch, CURLOPT_COOKIEFILE, getcwd().'/cookie.txt'); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_REFERER, "http://www.callofduty.com/"); 
    curl_setopt($ch, CURLOPT_URL,"https://profile.callofduty.com/elite/login"); 
    curl_exec($ch); 

    curl_setopt ($ch, CURLOPT_REFERER, "https://profile.callofduty.com/elite/login"); 
    curl_setopt($ch, CURLOPT_URL, 'https://profile.callofduty.com/elite/do_login'); 
    curl_setopt ($ch, CURLOPT_POST, 1); 
    curl_setopt ($ch, CURLOPT_POSTFIELDS, 'j_username=USERNAME&j_password=PASSWORD'); 
    echo "Initial Dump: <p>"; 
    echo curl_exec($ch); 
} 

function getPlayer(){ 
    login(); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_URL,"https://elite.callofduty.com/career/xbox/54d10030cc86b1b9c3162b395d46bffe#/playercardmw3"); 
    curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookies.txt");//add this line 
    curl_exec($ch); 
    echo "<hr/>Second Dump: <p>"; 
    var_dump(curl_getinfo($ch)); 
} 

Я не проверял это, потому что ваш код беспорядок, но попробуйте его.

Смежные вопросы