2010-10-05 2 views
1

У меня есть следующий код:PHP локон CURLOPT_HEADER и дом

curl_setopt($ch, CURLOPT_URL, $host); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $html = curl_exec($ch); 


    preg_match_all('|Set-Cookie: (.*);|U', $html, $results); 
    $cookies = implode(';', $results[1]); 


    $dom = new DOMDocument(); 
    $dom->loadHTML($html); 

на линии $ dom-> loadHTML ($ HTML); Я получаю следующее сообщение об ошибке:

 
Warning: DOMDocument::loadHTML() [function.DOMDocument-loadHTML]: 
Misplaced DOCTYPE declaration in 
Entity, line: 12 in 
D:\Programs\xampp\xampp\htdocs\ip\megafonmoscow.php 
on line 39 

Warning: DOMDocument::loadHTML() 
[function.DOMDocument-loadHTML]: 
htmlParseStartTag: misplaced 
tag in Entity, line: 13 in 
D:\Programs\xampp\xampp\htdocs\ip\megafonmoscow.php 
on line 39 

Warning: DOMDocument::loadHTML() 
[function.DOMDocument-loadHTML]: 
htmlParseStartTag: misplaced 
tag in Entity, line: 14 in 
D:\Programs\xampp\xampp\htdocs\ip\megafonmoscow.php 
on line 39 

Warning: DOMDocument::loadHTML() 
[function.DOMDocument-loadHTML]: 
Unexpected end tag : head in Entity, 
line: 32 in 
D:\Programs\xampp\xampp\htdocs\ip\megafonmoscow.php 
on line 39 

Warning: DOMDocument::loadHTML() 
[function.DOMDocument-loadHTML]: 
htmlParseStartTag: misplaced 
tag in Entity, line: 34 in 
D:\Programs\xampp\xampp\htdocs\ip\megafonmoscow.php 
on line 39 

ли линия curl_setopt($ch, CURLOPT_HEADER, 1); причина этой ошибки? Мне нужно это из-за куки. Любые идеи о том, как это решить?

ответ

2

Попробуйте удалить эту строку, чтобы она не возвращала заголовки, а затем используйте функции get_headers, чтобы получить их после запроса на завивание.

curl_setopt($ch, CURLOPT_URL, $host); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $html = curl_exec($ch); 
    $headers=get_headers($host, 1); 
+0

Если я ошибаюсь, функция get_headers() делает отдельный запрос к URL-адресу, поэтому вы можете получать разные результаты в зависимости от того, что вы делаете с SSL, и, конечно же, вы будете отправлять POST с помощью cURL (не относится к этому примеру, но стоит отметить) – richplane

2

Альтернативой подход mck89 является для загрузки заголовков и тела вместе, но разделить их, прежде чем пытаться разобрать его:

$html = curl_exec($ch); 

[snip] 

$html = preg_replace('/^.*\n\n/s','',$html,1); // strip out everything before & including the double line break between headers and body 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

Это экономит запрос HTTP и, следовательно, определенное количество времени ,

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