cURL и ASP.NET: проблема с параметрами записи

У нас есть одна поисковая система, которая была запрограммирована в asp.net.
Мне удается свернуть отдельные результаты, поскольку они имеют более или менее прямую связь, которую я могу предсказать и свернуть.
Но мне не удается свернуть список результатов, вот как это работает:

На странице поиска мы должны выбрать базу данных, которую мы хотим искать, с помощью флажка меню.
Как только я проверяю базу данных, которую я хочу найти, я нажимаю кнопку «Поиск», которая перенаправляет меня на страницу поиска с учетом выбранной базы данных.

Если я попытаюсь перейти на страницу поиска с прямой ссылкой, она не будет работать, так как не знает, в какой базе данных будет выполняться поиск.
Я попытался посмотреть параметры поста с помощью Firebug и получил следующее:

Checkbox_db1  on
__EVENTARGUMENT
__EVENTTARGET LinkButtonCategory
__VIEWSTATE zeyhbf5vg41g6a4f1ezragf136er46ga4gfv658a4r6g4 (something looking like that but longer)

Вот что я пытаюсь сделать в curl:

$ch = curl_init();
$fields = array ('Checkbox_db1' => 'on', '__EVENTARGUMENT' => '',
'__EVENTTARGET' => 'LinkButtonCategory', '__VIEWSTATE' => '');
$postvars = '';
foreach($fields as $key=>$value)
{
$postvars .= $key.'='.$value.'&';
}
rtrim ($postvars, '&');

curl_setopt ($ch, CURLOPT_URL, "monsite.com/choosedb.aspx");
curl_setopt ($ch, CURLOPT_POST, count($fields));
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postvars);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

$output1 = curl_exec($ch);

$fields2 = array ('TxtBox1' => 'value1', 'Txtbox2' => 'value2', '__EVENTARGUMENT' => '',
'__EVENTTARGET' => '', '__VIEWSTATE' => '');
$postvars = '';
foreach($fields2 as $key=>$value)
{
$postvars .= $key.'='.$value.'&';
}
rtrim ($postvars, '&');

curl_setopt ($ch, CURLOPT_URL, "monsite.com/search.aspx");
curl_setopt ($ch, CURLOPT_POST, count($fields2));
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postvars);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

$output2 = curl_exec($ch);

Но, конечно, это не работает …. и проблема в том, что я совсем не знаком с ASP.NET: /
Кто-нибудь может помочь? заранее спасибо

0

Решение

Итак, сначала вы получаете начальную страницу с обычным скручиванием.

Затем вы должны извлечь параметр VIEWSTATE:

$regexViewstate = '/__VIEWSTATE\" value=\"(.*)\"/i';

function regexExtract($text, $regex, $regs, $nthValue)
{
if (preg_match($regex, $text, $regs)) {
$result = $regs[$nthValue];
}
else {
$result = "";
}
return $result;
}

$viewstate = regexExtract($data,$regexViewstate,$regs,1);

И вы составляете свой новый пост:

$postData = '__EVENTARGUMENT=&__EVENTTARGET=LinkButtonCategory&__VIEWSTATE=';
$postData .= rawurlencode($viewstate).'&TxtBox1=value1&TxtBox2=value2';

curl_setOpt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_URL, $urlLogin);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);

$output = curl_exec($ch);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector