我有一个显示RSS Feed项目的新闻门户。读取大约50个来源,效果非常好。
只有一个来源我总是得到一个空字符串。 W3C的RSS验证器可以读取RSS源。甚至我的维也纳计划都会收到数据。
我该怎么办?
这是我的简单代码:
$link = 'http://blog.bosch-si.com/feed/';
$response = file_get_contents($link);
if($response !== false) {
var_dump($response);
} else {
echo 'Error ';
}
答案 0 :(得分:4)
服务该Feed的服务器需要设置用户代理。您显然没有User Agent set in your php.ini,也没有在file_get_contents
的调用中设置它。
您可以通过stream context:
为此特定请求设置用户代理echo file_get_contents(
'http://blog.bosch-si.com/feed/',
FALSE,
stream_context_create(
array(
'http' => array(
'user_agent' => 'php'
)
)
)
);
或全局任何http电话:
ini_set('user_agent', 'php');
echo file_get_contents($link);
两者都会给你想要的结果。
答案 1 :(得分:2)
博客http://blog.bosch-si.com/feed/需要一些标题来从网站上获取内容,最好使用curl。
见下面的解决方案:
<?php
$link = 'http://blog.bosch-si.com/feed/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: blog.bosch-si.com', 'User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'));
$result = curl_exec($ch);
if( ! $result)
{
echo curl_error($ch);
}
curl_close($ch);
echo $result;