2014-01-15 66 views
0

我想從頁面中提取數據,使用DOMCrawler Symfony 2。這是我想從中獲取數據的頁面:http://kovv.mavari.be/kalender.aspx如何從站點獲取__EVENTVALIDATION和__VIEWSTATE

但是我希望它發佈後,當你點擊'zoek'(下拉框中沒有參數)。這是我想要的頁面!起初我有:$html = file_get_contents("http://kovv.mavari.be/kalender.aspx");。但顯然這隻會加載沒有帖子的第一頁。

這是我現在有:

$post = http_build_query(array(
      'ctl00_ContentPlaceHolder1_ddlGeslacht' => 'Heren', 
      'ctl00$ContentPlaceHolder1$ddlReeks' => '', 
      'ctl00_ContentPlaceHolder1_ddlDatum' => '', 
      'ctl00$ContentPlaceHolder1$btnZoek:zoek' 
)); 

$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); 

但從my other Stack Overflow topic,我才知道,我也有送__EVENTVALIDATION和__VIEWSTATE爲好。但我不知道得到它們。我該如何解決這個問題? (對於在谷歌搜索或使一些關鍵的話也將是巨大的!)

這是我現在有:

$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); 

但我仍然得到頁無後,我失去了什麼?

回答

1

HTTP是一種無狀態協議,這意味着客戶端和服務器沒有內置的方式來跟蹤從一個請求到下一個請求的應用程序狀態。已經發明瞭各種技術來規避這種如cookie。 ViewState和事件驗證是ASP.NET使用的兩種技術,爲網頁提供了一種全面的感覺。

欲瞭解更多信息,請參閱link

+0

有沒有辦法得到這個?因爲我需要一篇文章後的數據。 – nielsv

+0

請參閱http://stackoverflow.com/questions/12786199/access-viewstate-eventvalidation-in-c-sharp – Pawan

+0

有沒有辦法做到在PHP? – nielsv

相關問題