У нас есть одна поисковая система, которая была запрограммирована в 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: /
Кто-нибудь может помочь? заранее спасибо
Итак, сначала вы получаете начальную страницу с обычным скручиванием.
Затем вы должны извлечь параметр 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);
Других решений пока нет …