Как войти на сайт используя curl и PHP? - PullRequest
1 голос
/ 04 сентября 2011

Я пытался войти на сайт удаленно. Я успешно сделал это, и целевая страница открывается правильно, и я могу извлечь из нее всю информацию. Проблема в том, что когда я нажимаю на любую ссылку, веб-сайт выводит меня из системы! Ранее ссылка относилась к моему домену, теперь я изменил ее на домен веб-сайта, но проблема все еще сохраняется. Я прилагаю код для вас, чтобы увидеть, как я отправил куки.

Я выполнил еще один curl_exec для другого URL-адреса в пределах сайта, но веб-сайт выводит меня из системы!

<html> 
<head> 
<base href="http://example.com/" /> 
<body> 
<?php 
$username = $_POST["uname"]; 
$password = $_POST["pass"]; 
$fields = "username=" . $username . "&password=" . $password . "&Login.x=61&Login.y=15"; 
$ch=curl_init(); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

curl_setopt($ch, CURLOPT_URL, 'http://www.SOMESITE.net/amizone/default.aspx'); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "ASPSESSIONIDSQADDRBQ=OCALKIGABGLPCJLKMGIKJLLF"); //I got this exact cookiename from LiveHTTPheaders (Firefox extension)
curl_setopt($ch, CURLOPT_COOKIEFILE, "ASPSESSIONIDSQADDRBQ=OCALKIGABGLPCJLKMGIKJLLF"); 
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000 ); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10000 ); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8' ); 
curl_setopt($ch, CURLOPT_AUTOREFERER, 1 ); 
curl_setopt ($ch, CURLOPT_REFERER, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0 ); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0 ); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
ob_start(); //the issue with the script remains with/without ob_start/ob_end_clean
$raw_data=curl_exec($ch); 
curl_setopt($ch, CURLOPT_POST, 0); //at this point im trying to get another page using curl. since i will not be using post i have set it to 0.
curl_setopt($ch, CURLOPT_URL, 'http:/site.net/amizone/WebForms/TimeTable/StudentTimeTableForWeek.aspx'); 
$ttable = curl_exec($ch); 
ob_end_clean(); 
echo $ttable; 
//curl_close($ch); 
//$raw_data = preg_replace('/\s(1,)/',' ',$raw_data); //clean it up 
//echo $raw_data; 
//$raw_data = stripslashes($raw_data); 
//$raw_data = explode("<strong>",$raw_data); 
//2 3 and 4 
//echo htmlentities($raw_data[4]); 
?> 
</body> 
</html> 

Примечание. Я взял имя файла cookie из «LiveHttpHeaders», расширения для Firefox. Что мне не хватает?

1 Ответ

1 голос
/ 04 сентября 2011

Что вы делаете с cookiejar и cookiefile? Они не предназначены для установки файлов cookie, и переменная сеанса не должна быть жестко закодирована, а должна быть получена из первого запроса к веб-серверу ASP.

Вы хотите установить для cookiejar и cookiefile значение согласно документации:

CURLOPT_COOKIEFILE Имя файла, содержащего данные cookie. Файл cookie может быть в формате Netscape или просто в стиле HTTP Заголовки сбрасываются в файл.
CURLOPT_COOKIEJAR Имя файла для сохранить все внутренние куки, когда ручка закрыта, например, после вызов curl_close.

Итак, нет данных cookie, но есть путь к файлу. Таким образом, файл cookie сеанса (и другие файлы cookie) будет храниться и использоваться в последующих запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...