2012-03-09 5 views
3

다음 코드는 PHP 용 SIMPLETHTMLDOM 파서를 사용하여 HTML을 추출하는 데 사용됩니다. 어디 내가 잘못하고있는 중이 야가비지 HTML 출력을 반환하는 수정 된 HTTP 헤더가있는 file_get_contents()

‹µVßsâ6~Ï_¡s§¹ð2¹^:ìNˆÝ†)!ið=äéFØV"K>I˜pMÿ÷®lCšéÝ[email protected]+í­¾ý´òè]t}‘ÜÝÄä2¹š’›Oãéä‚x]J'qò¥Q5š=ŸÒxæ…G£Ü À2,·ÂÙ<&]YsËÁ 8eŒ%ãœU©*·#Úئ“Ù$×°<* ôRc<¢AóänÏ/ã8!v[B`áÑRÔâ&Õ¼´D0¹Z³Þ=«X³è£SuohªŠBÉåZ¦¦wo¼pD“o*¦ 7“88ÉTº[email protected]Ú¢ókà[ålþÓ­`[ÐæÀà,8yö_¸Pãí$ëŸHVñ³J÷XYÎXAð~Ö¤¬„÷ƒXŠÜ³óôTg/ "Wª×'ñÓSmÖgm‡€åJ’œÉ[email protected]¬µÒ'ò—»Ö’X½†áßdÃe¦6=%ÁéIðÒzH0«¸ÂìÍIgxô@>W¾|°´xäÃBЖ5ãëèŽ,V©JÞËúççU0½â2ð‰Uå^n„ø*·¨j¦žÙ<𱾯ˆt˜zùº.GxöjjìV AÅ _pÁívó,9$¥2H[%la”X[":zÐ/‡¤Ù´‘¿v5xô‡uªnÄ,}G6Ì3IÎÇÓ˜¤ „)YÊå ³](FÁ-—,Ëšåö4}ßÿ­Æ¿wÝî! 3V‘1²rn™¶†\‚†nõÿu£æœ?ºÔí0p,³aQ{¡¤Åz“s ì_ÛÚ¬$8ó}R1ÁW2Àsï{O§7çQ4™ýŽ§t³ùÍùE3_ßFñ-.7ÕúøËi‹h°?øná£+%î…¬@ðdðáÅ^$̘Àx3—&±¶ä˜‰ÃŸ¡óB‡ÇraÊaó&m§ÉU%¶Ž6//¼Ä™s Ç+;$;+l 5Ú6†Âg.­VÙº¾PÎ9Üõ¸ïô/,—U»^1ý–Lp®æ·²ËÁ{3 ¤;:Z•±ms€6RâVÈ>ÈaÓ­ñp˜à ¶BTs,¹uu‹Úzôý±M¢FñªÀKĤÅÞ]]ÐáAgÇíMèöiö*[ûN×Ç]±ÚJì@ιÁfÈS&hüç§I2‰çôÔïŸÒ«ó[šþÏ8ºù_|$ªÞW^zï¶Ö@Â&ŒÔF Å2²ä—Hƒ¬CdD?ÿ‡\²ÅòÛ¹ ÑA.Ïø¤xÏ@¿Iè£7)à`pi¢¬Ét‰ÖÐæÄæ°gk0jB<=óšé4çºês>¿Ð.]¤Âhš ­›\jvìÒ¦æ”S8>Ѻï9‰V÷±W åu»ixH-[à—º¸ÇÀ͇Å?§m2“ 

! :

include('simple_html_dom.php'); 

$context = stream_context_create(array(
    'http'=>array(
    'method'=>"GET",     
    'header'=>"Accept: text/html,application/xhtml+xml,application/xml\r\n" . 
       "Accept-Charset: ISO-8859-1,utf-8\r\n" . 
       "Accept-Encoding: gzip,deflate,sdch\r\n" . 
       "Accept-Language: en-US,en;q=0.8\r\n", 
    'user_agent'=>"User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11\r\n"    
) 
)); 

$html = file_get_contents('http://www.nseindia.com/content/equities/cmbhav.htm', false, $context); 
echo $html; 

foreach($html->find('a') as $e) 
    echo $e->href . '<br>'; 

생성 된 출력은 쓰레기 HTML입니다 나는 바이올린에서 헤더 정보를 확인했다. 브라우저에서 링크를 열 때 실제 헤더 정보입니다!

$html = gzuncompress($html); 
:

Accept-Encoding: gzip,deflate,sdch\r\n 

는 이제 그 압축 된 데이터를 디코딩해야 : 당신이 명시 적으로 압축 된 데이터를 처리 할 수 ​​있음을 선언하는 HTTP 요청에서

[Client] 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11 
[Transport] 
Host: www.nseindia.com 
Proxy-Connection: keep-alive 
+2

야생 추측 : 가비지는 zip'd html 일 수 있습니다. HTTP 헤더 "Accept-Encoding ....."을 제거하십시오. 일반 텍스트 나오입니까? –

+0

인코딩 된 데이터처럼 보입니다. Maby 당신은''Accept-Encoding : gzip, deflate, sdch \ r \ n "'을 제거해서 gzip으로 압축 된 내용을 얻지 못하게하거나 zlib 함수를 사용하여 직접 압축을 풀 수 있습니다. 오 @ 헨슈만 빨리되었다 :) – piotrekkr

+0

감사합니다 @phil. ..... – Sandy505

답변

0

, 즉 서버가 반환하는 것입니다 수 있도록

piotrekkr은 댓글에 언급 된대로 Accept-Encoding 헤더를 대신 삭제할 수 있으며 웹 서버는 대신 일반 텍스트를 반환해야합니다.