2012-04-23 156 views
1

我想使用php curl代碼(其中包含數據頁面明智)來廢棄aspx頁面。最初頁面使用get方法加載,但是當我們選擇頁面編號時。從下拉菜單中使用post方法提交頁面頁面。使用PHP curl颳去aspx頁面

我想通過傳遞postfields來查找特定頁面的數據no,但無法做到這一點。

我創建了一個虛擬代碼來獲取第5頁的記錄,但它總是返回第一頁的結果。

示例代碼

$url = 'http://www.ticketalternative.com/SitePages/Search.aspx?catid=All&pattern=Enter%20Artist%2c%20Team%2c%20or%20Venue'; 
$file=file_get_contents($url); 
//<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value= 
preg_match_all("#<input.*?name=\"__VIEWSTATE\".*?value=\"(.*?)\".*?>.*?<input.*?name=\"__EVENTVALIDATION\".*?value=\"(.*?)\".*?>#mis", $file, $arr_viewstate); 
$viewstate = urlencode($arr_viewstate[1][0]); 
$eventvalidation = urlencode($arr_viewstate[2][0]); 
$options = array( 
CURLOPT_RETURNTRANSFER => true, // return web page 
CURLOPT_HEADER => true, // don't return headers 
CURLOPT_FOLLOWLOCATION => true, // follow redirects 
CURLOPT_ENCODING => "", // handle all encodings 
CURLOPT_USERAGENT => "spider", // who am i 
CURLOPT_AUTOREFERER => true, // set referer on redirect 
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect 
CURLOPT_TIMEOUT => 1120, // timeout on response 
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects 
CURLOPT_POST => true, 
CURLOPT_VERBOSE => true, 
CURLOPT_POSTFIELDS => '__EVENTTARGET='.urlencode('ctl00$ContentPlaceHolder1$SearchResults1$SearchResultsGrid$ctl13$ctl05').'&__EVENTARGUMENT='.urlencode('').'&__VIEWSTATE='.$viewstate.'&__EVENTVALIDATION='.$eventvalidation.'&__LASTFOCUS='.urlencode('').'&ctl00$ContentPlaceHolder1$SearchResults1$SearchResultsGrid$ctl13$ctl05=4'); 
$ch = curl_init($url); 
curl_setopt_array($ch,$options); 
$result = curl_exec($ch); 
curl_close($ch); 

preg_match_all('/<a id=\".*?LinkToVenue\" href=\"(.*?)\">(.*?)<\/a>/ms',$result,$matches); 
print_r($matches); 

任何人都可以幫我這個問題,我在哪裏得到錯誤的,我認爲它不會因爲在第一次加載頁面與GET方法工作,因爲我們去網頁上的鏈接,它使用帖子。

我將如何獲得特定頁號的記錄?

問候

+1

由於ASP.NET的ViewState驗證,您可能無法進行POST。這是所有表單值的荒謬哈希。 – jrummell 2012-04-23 13:14:33

+0

@ jrummell - 那麼可以做些什麼來克服呢? – mauzzamali 2012-04-23 13:20:02

+0

您將不得不以某種方式根據您的POST變量(以及您未使用的頁面上的變量)重新創建ViewState哈希。我不知道你會怎麼做。你有權訪問aspx源代碼嗎?你可以改變它接受GET參數嗎? – jrummell 2012-04-23 13:31:50

回答

-2

我用PHP編寫刮刀有時當客戶需要它,但我絕不會試圖刮掉的ASP.NET網站使用PHP。爲此你需要perl python或ruby。所有3個都有機械化庫,通常很容易。