2013-08-01 1 views
0

Я назначил задачу об отбросить данные с сайта, защищенного паролем, я сделал это через CURL, но теперь я хочу получить ссылку внутри этого html, возвращаемого CURL, и перейти к которые связывают и захватывают данные оттуда. Я передал ответ CURL в file_get_contents(), но не работал. Вот мой код CURL.Объединить CURL и простую HTML-DOM для утилизации данных

$ckfile = tempnam("/tmp", "CURLCOOKIE"); 
$useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2'; 

$username = "XXXXXX"; 
$password = "XXXXXX"; 


$f = fopen('log.txt', 'w'); // file to write request header for debug purpose 


$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 

$html = curl_exec($ch); 

curl_close($ch); 

preg_match('~<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />~', $html, $viewstate); 
preg_match('~<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />~', $html, $eventValidation); 

$viewstate = $viewstate[1]; 
$eventValidation = $eventValidation[1]; 




$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_REFERER, $url); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_STDERR, $f); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 

// Collecting all POST fields 
$postfields = array(); 
$postfields['__EVENTTARGET'] = ""; 
$postfields['__EVENTARGUMENT'] = ""; 
$postfields['__VIEWSTATE'] = $viewstate; 
$postfields['__EVENTVALIDATION'] = $eventValidation; 
$postfields['ctl00$LoginPopup1$Login1$UserName'] = $username; 
$postfields['ctl00$LoginPopup1$Login1$Password'] = $password; 
$postfields['ctl00$LoginPopup1$Login1$LoginButton'] = 'Log In'; 

curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
$ret = curl_exec($ch); // Get result after login page. 

Вот простой HTML код дом

$html = file_get_contents($ret); 

Это ошибка, я получаю

Warning: file_get_contents(1): failed to open stream: No such file or directory 

Любое другое предложение, как сделать это будет оценено. благодаря

+0

$ ret будет ответом от curl_exec и не будет именем файла или местоположением, если вы выведете $ ret, что вы получаете? Вы хотите получить HTML-ответ от запроса на завивание? – MajorCaiger

+0

$ ret дать мне 1 в ответ. –

ответ

0

Если Вы желаете вывода HTML страницы, которую вы посылаете запрос, попробуйте установить CURLOPT_RETURNTRANSFER в true, то $ret должен содержать HTML страницы после того, как вы CURL'd одного из них.

Я бы не использовал DOMDocument, чтобы проанализировать ответ, так как HTML со страницы может быть неправильно отформатирован и DOMDocument будет жаловаться.

Если вы просто ищете ссылки, вы можете использовать preg_match_all на HTML.

+0

спасибо за ваш быстрый ответ. На самом деле я уже знаю следующую ссылку, куда мне нужно идти и получать данные. Но проблема, я не уверен, как это сделать. Либо «простой html dom» работает с завитком, либо нет. Например, мои файлы cookie и сеансы хранятся с помощью curl, теперь у меня есть url = 'google.com', где мне нужно идти и захватывать данные, как я могу сделать это в том же файле? –

0

Как MajorCaiger говорит, вам нужно установить CURLOPT_RETURNTRANSFER истину, а затем загрузить его с str_get_html:

$html = curl_exec($ch); 
$doc = str_get_html($html); 

Даже до сих пор, я не думаю, что у вас есть много шансов на успех с этим, те, Формы asp очень сложны.

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