为什么php的file_get_contents错误地从xkcd中检索json文件?

时间:2011-01-21 16:47:09

标签: php json http-headers file-get-contents

在编写PHP脚本以下载xkcd漫画时,我在尝试获取特定漫画时遇到了错误(而不是最新的漫画)。具体来说,将file_get_contents指向以下URL:

  

xkcd.com/$COMIC_NUM/info.0.json

莫名其妙地在xkcd.com上检索了漫画页面的xhtml版本,而不是JSON文件。 但是,如果我在浏览器中请求完全相同的URL,则会下载正确的JSON文件。 我不确定为什么会发生这种情况,但我怀疑它与发送的请求标头有关。

请帮忙! :S

2 个答案:

答案 0 :(得分:2)

虽然我亲自与file_get_contents完美配合,但您可以尝试使用cURL,如下所示(如果您有的话),因为这将是一个更强大的解决方案:

<?php
    $COMIC_NUM = 849;

    $curlSession = curl_init();
    curl_setopt($curlSession, CURLOPT_URL, '"http://xkcd.com/'.$COMIC_NUM.'/info.0.json');
    curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
    $jsonData = curl_exec($curlSession);
    curl_close($curlSession);

    echo($jsonData);
?>

答案 1 :(得分:0)

对我来说很好。可能$COMIC_NUM未正确设置?

php > echo file_get_contents('http://xkcd.com/847/info.0.json');
{"img": "http://imgs.xkcd.com/comics/stingray_nebula.png", "title": "Stingray Nebula", "month": "1", "num": 847, "link": "", "year": "2011", "news": "", "safe_title": "Stingray Nebula", "transcript": "[[Two white figures are silhouetted against a dark sky.  They're sitting on top of a grassy hill.]]\nPerson: I know things are tough right now.  When I was going through some difficult times as a kid, I would go up on the roof and look through my telescope.\n\nPerson: One day I found a tiny star in Ara that seemed friendly.\nPerson: There were millions like it, but I decided that this one was mine.\n\nPerson: When things got bad, I'd go find that star, and think of my favorite Tolkien quote.  It's from Sam's time in Mordor.\n\n((The next panel is diagonally downward to the right of the previous.  The upper left corner overlaps.))\n[[A star is above the highest peak in a chain of mountains.]]\n\"There, peeping among the cloud-wrack above a dark tor high up in the mountains, Sam saw a white star twinkle for a while.  The beauty of it smote his heart, as he looked up out of the forsaken land, and hope returned to him.  For like a shaft, clear and cold, the thought pierced him that in the end the shadow was only a small and passing thing: There was light and high beauty forever beyond its reach.\"\n- The Return of the King\n\nCompanion: That's comforting!\nPerson: It was rather undercut in 1987, when the light from my star's explosion reached Earth.  The debris forms the Stingray Nebula.\n\nCompanion: There's probably a lesson there.\nPerson: \"Never trust an unstable asymptotic giant branch star.  Stick with main sequences and dwarfs.\"\nCompanion: I'll, uh, keep that in mind.\n\n{{Title text: E\u00c3\u00a4rendil will patrol the walls of night only until the sun reaches red giant stage, engulfing the Morning Star on his brow. Light and high beauty are passing things as well.}}", "alt": "E\u00c3\u00a4rendil will patrol the walls of night only until the sun reaches red giant stage, engulfing the Morning Star on his brow. Light and high beauty are passing things as well.", "day": "14"}