即使使用curl()

时间:2015-06-16 10:32:20

标签: php xml rss

我有一个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和域更新主机后才能访问。只是为了澄清......我的主人目前正在更新所需的信息。

1 个答案:

答案 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服务器需要这样做。