2014-01-14 5 views
1

Я хочу извлечь данные со страницы с помощью DOMCrawler of Symfony2. Это страница, на которой я хочу получить данные: http://kovv.mavari.be/kalender.aspx
Получить HTML со страницы после POST

Но я хочу это после публикации, когда вы нажимаете «zoek» (никаких параметров в выпадающих меню), это страница, которую я хочу! Теперь у меня есть: $html = file_get_contents("http://kovv.mavari.be/kalender.aspx");

Но, очевидно, он загрузит первую страницу без сообщения. Есть ли способ, которым я могу загрузить страницу с сообщением? или мне нужно сначала сохранить страницу на моем локальном диске?

UPDATE:
Это мой код прямо сейчас:

$post = http_build_query(array(
    'ctl00$ContentPlaceHolder1$ddlGeslacht' => 'Heren', 
    'ctl00$ContentPlaceHolder1$ddlReeks' => '', 
    'ctl00_ContentPlaceHolder1_ddlDatum' => '' 
)); 

$options= array('http' => array(
    'method' => 'POST', 
    'header' => 'Content-type: application/x-www-form-urlencoded', 
    'content' => $post 
)); 

$context = stream_context_create($options); 
$html = file_get_contents('http://kovv.mavari.be/kalender.aspx', false, $context); 

Но HTML до сих пор не изменился, он по-прежнему первая страница без поста ..

UPDATE 2: Это является тем, что у меня есть сейчас:

$url = "http://kovv.mavari.be/kalender.aspx"; 
$regs=array(); 

$cookies = '../src/VolleyScout/VolleyScoutBundle/Resources/doc/cookie.txt'; 

// regular expressions to parse out the special ASP.NET 
// values for __VIEWSTATE and __EVENTVALIDATION 
$regexViewstate = '/__VIEWSTATE\" value=\"(.*)\"/i'; 
$regexEventVal = '/__EVENTVALIDATION\" value=\"(.*)\"/i'; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
$data=curl_exec($ch); 

$viewstate = $this->regexExtract($data,$regexViewstate,$regs,1); 
$eventval = $this->regexExtract($data, $regexEventVal,$regs,1); 

$postData = '__VIEWSTATE='.rawurlencode($viewstate) 
    .'&__EVENTVALIDATION='.rawurlencode($eventval) 
    .'&ctl00_ContentPlaceHolder1_ddlGeslacht=Heren' 
    .'&ctl00$ContentPlaceHolder1$ddlReeks' 
    .'&ctl00_ContentPlaceHolder1_ddlDatum' 
    .'&ctl00$ContentPlaceHolder1$btnZoek:zoek' 
; 

curl_setOpt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); 

curl_setOpt($ch, CURLOPT_POST, FALSE); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); 

$data = curl_exec($ch); 

echo $data; 

curl_close($ch); 

Но я до получения страницы без почты, я что-то упускаю?

+0

Измените форму для 'zoek' на свой собственный скрипт и сделайте завиток оттуда, чтобы получить результаты поиска со своего сайта. –

+0

Возможно, вам также нужно добавить кнопку в сообщение ('ctl00 $ ContentPlaceHolder1 $ btnZoek: zoek')? Помимо очевидного, страница представляет много информации в запросе ('__VIEWSTATE', '__EVENTVALIDATION'), просто посмотрите на нее в браузере. Возможно, есть что-то большее, чем кажется на первый взгляд ... – nietonfir

+0

Пытался добавить btn, но все равно никакого результата :( – nielsv

ответ

2

Вы должны использовать параметр контекста file_get_contents и передать stream context object, чтобы отправить запрос.

$post = http_build_query(array(
    'ctl00$ContentPlaceHolder1$ddlGeslacht' => '...', 
    'ctl00$ContentPlaceHolder1$ddlReeks' => '...', 
    // ... 
)); 

$options= array('http' => array(
    'method' => 'POST', 
    'header' => 'Content-type: application/x-www-form-urlencoded', 
    'content' => $post 
)); 

$context = stream_context_create($options); 
file_get_contents('http://kovv.mavari.be/kalender.aspx', false, $context); 
+0

Обновлен мой начальный пост, изменил его на ваш ответ, но все еще получаю первую страницу перед сообщением. – nielsv

+0

Вы должны отправить '__EVENTVALIDATION' и '__VIEWSTATE', а также .. Эти параметры заданы asp.net - возможно, вам нужно отправить два запроса и извлечь эти два скрытых поля из первого, чтобы создать действительный почтовый запрос .. Я попробовал это сам, и он работает – Philipp

+0

Could вы даете еще несколько объяснений __EVENTVALIDATION и __VIEWSTATE? Я действительно не знаю, как их реализовать. – nielsv

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