我有一个RSS源的网址:
$url = 'http://www.myurl.com/sth?format=RSS';
我可以在浏览器中打开它而不会出现问题。但是
$feed->load($url)
返回'false'。所以我开始调查:
$ch = curl_init($file);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print curl_error($ch); // prints 'couldn't connect to host'
echo "CODE: ".$retcode; // $retcode is 0
$file_headers = get_headers($file);
echo $file_headers[0]; // is null
那么,这种行为的原因是什么? myurl.com服务器上是否有某些端口被阻止?有没有办法解决它(比如创建文件的本地副本并对其进行处理)?
答案 0 :(得分:0)
可能该网站有一些实施外部连接的块,例如检查用户代理,推荐......
答案 1 :(得分:0)
也许服务器正在做一些嗅探,并且如果发现curl正在进行工作,则不会在该URL上提供任何内容。你可以尝试使用phantomJS和/或Selenium来绕过这些过滤器。 Selenium有PHP绑定。
答案 2 :(得分:-1)
如果您使用的是CentOS(关于该风格的已知问题),请执行以下操作以测试并确保不是问题。稍后您可以稍后发出特定的过滤。
> emacs /etc/selinux/config
locate following line
SELINUX=enforcing
Change this to
SELINUX=disabled
保存文件,然后重试。如果您可以在浏览器中打开它而没有问题,它可能是您的本地主机防火墙。
如果这是一个问题,请将SELinux设置回enforcing
并发出
setsebool -P httpd_can_network_connect
如果您希望httpd能够连接到tcp端口