我有一个php函数来从xml feed中获取精选帖子。代码可以在下面找到:
function getJobsFeed($feed_url) {
$content = file_get_contents($feed_url);
$xml = simplexml_load_string($content);
$i = 0;
$max_num = 4;
foreach($xml->Item as $entry) {
echo "<div class='slide'>";
echo "<h5>$entry->Location</h5>";
echo "<p>$entry->Title</p>";
echo "<p><a href='$entry->Link' class='button'>Apply</a>";
echo "</p></div>";
if (++$i == $max_num){
break;
}
}
}
只要我使用的Feed是通过http,一切都没问题。一旦供应商开始使用https,它就会停止在我的终端上显示任何内容。
有什么方法可以解决这个问题吗?
谢谢, 即
E:
我意识到我之前没有通过网址。改变了这个并且问题发生了变化。更新了以下代码:
function getJobsFeed($feed_url) {
//$content = file_get_contents($feed_url);
$curl = curl_init();
curl_setopt($curl, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, $feed_url);
$result = curl_exec($curl); // $result will contain the XML content
//curl_getinfo($curl);
curl_close($curl);
echo $result;
$xml = simplexml_load_string($result);
$i = 0;
$max_num = 4;
foreach($xml->Item as $entry) {
echo "<div class='slide'>";
echo "<h5>$entry->Location</h5>";
echo "<p>$entry->Title</p>";
echo "<p><a href='$entry->Link' class='button button--crimson'>Apply</a>";
echo "</p></div>";
if (++$i == $max_num){
break;
}
}
}
现在我收到以下错误:
网址无效
请求的网址“/feeds/datafeed.ashx?featured=true&format=xml”无效。 参考#9.86cd417.1434453158.409d8a2
以防万一 - 我可以检查网址,并且Feed已存在,所以这不是问题。
curl_getinfo的内容:
数组([url] =&gt; provided_link [content_type] =&gt; text / html [http_code] =&gt; 400 [header_size] =&gt; 210 [request_size] =&gt; 105 [filetime] =&gt; -1 [ssl_verify_result] =&gt; 0 [redirect_count] =&gt; 0 [total_time] =&gt; 0.305444 [namelookup_time] =&gt; 0.150466 [connect_time] =&gt; 0.15239 [pretransfer_time] =&gt; 0.303479 [size_upload] =&gt; 0 [ size_download] =&gt; 260 [speed_download] =&gt; 851 [speed_upload] =&gt; 0 [download_content_length] =&gt; 260 [upload_content_length] =&gt; 0 [starttransfer_time] =&gt; 0.305407 [redirect_time] =&gt; 0 [certinfo ] =&gt; Array()[primary_ip] =&gt; primary_ip_here [primary_port] =&gt; 443 [local_ip] =&gt; local_ip_here [local_port] =&gt; 34340 [redirect_url] =&gt;)
不确定这是否会发生任何变化,但我从中获取Feed的位置目前处于暂存阶段,因此只有在我使用提供的ip和域更新主机后才能访问。只是为了澄清......我的主人目前正在更新所需的信息。
答案 0 :(得分:0)
您的用户代理定义不对,您错过了CURLOPT_USERAGENT
部分通话。
更改为:
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
// ^ was missing
服务器返回400 Bad Request响应,很可能是因为您没有提供用户代理标头 - 某些Web服务器需要这样做。