首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >file_get_contents($url)返回与源完全不同的内容

file_get_contents($url)返回与源完全不同的内容
EN

Stack Overflow用户
提问于 2014-05-21 19:48:47
回答 3查看 163关注 0票数 0

我想做的是得到网页和水蛭从它的一些信息。该代码工作了一段时间,但现在它返回一些不能在浏览器中显示的内容。

代码语言:javascript
复制
$html = file_get_contents("http://thepiratebay.com/");
echo $html;

有一段时间,这段代码只是镜像了我请求的网页,但现在我得到了以下内容:

‹½[{sÛ¸ÿ;ù°f®¶ç,ÊzØIlI7–±ÇQcçÕ›+"!EÐ(EIóÝ»H ©¯SöæbìþvÅbABÝ‹wç_†—È3¿ÿ¼+ÈÇÁ¤W#AMvûÏüבãáˆÑ«Åb\YKš>é_°Eà3ì¢YÌ©s€flN ?@<“ÎÆb#²ƒ<‚†4‚ ^¢º"L°¿.w9°q"©OI ЀŠE²È© ݆3t @~¯æîD4”5ä°@G¯VR'„ÙÅñ CD¬M )G¢¼ŠV-¯Ý”,,r¹¡Ú,l <§hD…Ðüh³ÀW:'&$ªã0ô©ƒ¥½ºÝÄÚ‡úÉa¾Èš²Îi†'Q2U¡@Ñ cŸÔ¥õ9‰è8Á0]¾ÿBØìæüˆ>ùÃÛ8¿¿¼>{õz~öáÍ·«k¯ýéfÑê|s ÄN½þ;#_ ›KôêMU-> ¦0˜~¯ÆÅÒ'Ü# ò"2îÕ\ºÓp8¯dÑ Ä‚bÍàÖ“Žxä¬z?ò†tä#{Ì"X£ÛÐ=Su~'KÇÔë á¯h1Ã40ô0y ޝ†Ä2„±4¦¨ÁBèVÃQý:ó3UK‘•Ÿ÷j÷Š´á‘ydìЬåek8•. 1ž ìË»’ü|žççsûþ²$0Êó#ûî]Yþýƒ <¿‹óü.¶/Þ”äÓ<ÿ˜ÚW7%ù)ÏóSnßÜ—µß/°ß·ïnËÚO ì'öEÙù£¢@aß<”õ¿û ·/ËÚà‡Â–ÅßÂ?x_vþ£‚ù쫲üaÁü…¾=,;^œç÷bûúCÙñ/À'¾ýº¬þ¢À~Ùeù£ý£Ø~_V>-ˆ?Sû¾ìúu Ö¿ƒËûŸW°~|DÜc‹ŠðŽsx×8p=â»Õà½Èã]Tì¬/‹!«×W9ÐöE%H¯òH•Ų¶¹¹ïϪÁjb}ŸhàV4qms³]G}‹+ÙÞÛæ^»Žøáîæs5mU.þ¶Ü6oÞÝ£=:Änƒ=ýjð·áŸnÄh5V›ÉÆ:ªZ§èÝÏOÓÿ%lÇXª¯åïj@šëÔ°’”­c¬Ë©¢Ù1dfÔý×j :9¨ÏƒwŸÛLJÕÀåà>QZ ÔqªÊØÒ1‹ïÿT:Fz‘WM:F4Iá*ÛîŒ2dQP Fs £Ò\ðȈ"k•[ŽŒ’ ©#â¨*;›p•ÿ##š$X§òGFP1§¯ºóØ‘±ÜÄÊVÛ±±Ú*i®ƒ€E—õÊ^$.…;g3êT„ÖΡU¹ÚŽÕ¶²nN¢ŠÐŽòÖyKNG~EæÎŸ¦Žù¼ÛÐW[º#æ.ááÒ9¢n¯6SU¼f¿‹S€µ—Ë›ßâ»<ÄAÚm(b·áˆÒ2¬Qà)-]¿É "Lúé÷þäúÈÑtôïUוZœ#Éê­·ªf¼µþAjS('"´grÞ«ª!gƒ°UŽ˜¯){=‘–4*S72ÎäM´zlGbኅH 7‘#en0#,V²´{fW?’h«=á>¡†>vˆÇ|—D¹66fNÌÁñŸbwOyÒi},8‚¾:™räÂ2*ÙÀËI¿ÑdrnHÉŠJƳg:ŽôÅOˆð¤ÑX,Öì”áØrجúñ„¼áÓ)±B/üMÉÞ¿´Ï~i]Áÿ‹öoxžúxÉbÑÅB°ÀvXE—^dKÞQ¬û&s'TÝa>‹¸ã˜ŸN<ÅYCêRO¯¶ ®ðNÀE¯§‘Í'-Y†NÄ|X“òÖ«!e܈Ej¾Ã¾Ï.äX.åÇñ˜È{Ez Ô˜¤#)-ä0 bAD15ê&V ¶zÌ90ë–º¢Öµ¥5äbëqäg#º1:IA¾ ˜:u‘ð(G!ÌŒe%ÍæžÀ@Éxai,éÜ%W¡vÆq †oÏ=àÔÝÿ>ÇzäãGÞs-X—>Œ#,øÁòOîÀÌ=¾ÿûáa¯ñ/­¢%{®å3š÷Û• »'êÁwOéxoÇ”5XÞ¸{€µÿ]8“6~úÈ-XvÔ•é\᯻0°~„\Á–9¤0› —[\*[jjÄs‰^G"1 ÀCö´Eû§?~ì¹°Îfê~Ý®„](¥“±Aû§ë7ŲUÒX\_…ÝF˜Ž7Ú>ßüdÁü—O x÷ѱDrcÙÊÈ©'ºïퟦñ\Ú™ŽØWp!Y‚ í݆ø)¨úˆhÂ>e°:„aÝCé ‹™Ñl‹}%¶¼þddÂ/6à纇„OŠ%à•Ø2Ö›oyM-Èæ „ë1P¥2CÈ.¡Š>Ș:D:Lt©DR,%w\žjhF“jhF”和š%žjhF,š%žjhF,š%žjhF“jhF”和š%ž“b t%6_´0y<šoâÉÞíTl”(b t%6_´0y<šoâÉÞíTl)dμ!r§A·±3!u%w“G]W^L Qíà‰œ‘j=t†”†“²NMÕÃÖìú5#cöˆ¿ÊЮٹÝd7”ó4,“ù.d蔥ÈOgiŽ)ýf6ÉËÖô­Ãƒ¹N–ME‡’(Oê9aiË6q°ÃˆyN\ľɒäLÐN½ŽrÒŒÜU„#—yF†®ZÀ<♡ùgZë+ò6AIJ§Îu:Ú[…pÃä=°ù¡Ý·È;.%Gk?k†ü)$w,{H x?o Go±ón欧元lQ*áü3M 3M~…‡íŠü!…在聚-!4(“‰8.…) Aq‘š’š‘”cK;q j.5-8“Aq.5-8”Aq j-8“Aq”{u nZ/:Û“fóîh0ùøòéͧN+ÝÿóóÕìñb°|d¥Œ?ë£ôÓº©¿ÏÌݘ¯"éûûûìdÌC$›’—jÐb¾IKÂSá~ã¤\s>½IšWˆC†ƒ¡’$1úAq 3:F{,…]h§^è÷Á¿ÂìDlIMQ­ÕOŸ?Kß(=ê}ÃtLϨ–Ì´¸õd‘ä~;XêŒf%‡ÀÞûœèuzj'š"º:d5¨<×ðÃÐ9ÉÊ¿oWÖ‚óì†ôãùêp ~0 6 0 o,ˆŸOŒ8`

我不明白。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-21 19:54:32

您可以使用curl来获取数据,correctly.curl比file_get_contents()快得多

getContents返回获取的数据。

代码语言:javascript
复制
function getContent($url)
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => false,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => "",
        CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0",
        CURLOPT_AUTOREFERER => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT => 120,
        CURLOPT_MAXREDIRS => 10);
    $ch = curl_init($url);
    curl_setopt_array($ch, $options);
    $result= curl_exec($ch);
    curl_close($ch);
    return $result;
}
票数 1
EN

Stack Overflow用户

发布于 2014-05-21 19:51:51

这是因为GZIP压缩是打开的。您需要使用CURL或定义http上下文,这样它就会发送accept-encoding: gzip;q=0,deflate,sdch头.

会是这样的:

代码语言:javascript
复制
$opts = array(
   'http'=>array(
      'method'=>"GET",
      'header'=>"Accept-Encoding: gzip;q=0,deflate,sdch\r\n"
   )
);
$context = stream_context_create($opts);
$result = file_get_contents('http://www.thepiradebay.com', false, $context);
票数 2
EN

Stack Overflow用户

发布于 2014-05-21 19:56:11

试试这个:

代码语言:javascript
复制
function get_url($url) {
    $opts = array(
        'http'=>array(
            'method'=>"GET",
            'header'=>"Accept-Language: en-US,en;q=0.8rn" .
                        "Accept-Encoding: gzip,deflate,sdchrn" .
                        "Accept-Charset:UTF-8,*;q=0.5rn" .
                        "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.4rn"
        )
    );

    $context = stream_context_create($opts);
    $content = file_get_contents($url ,false,$context);

    foreach($http_response_header as $c => $h){
        if(stristr($h, 'content-encoding') and stristr($h, 'gzip')){
            $content = gzinflate( substr($content,10,-8) );
        }
    }

    return $content;
}

echo get_url('http://www.thepiratebay.com/');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23792486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档