即使使用 curl() 也无法使 XML 提要与 https 一起工作

Can't make XML feed work with https even with curl()

我有一个 php 函数可以从 xml 提要中获取精选帖子。代码可以在下面找到:

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;
    }
}

}

只要我使用的提要是通过 http,一切都很好。一旦 Feed 供应商开始使用 https,它就停止在我这边显示任何内容。

有什么办法可以解决这个问题吗?

谢谢, E.

E:

我意识到我之前没有通过 url。改变了这一点,问题就演变了。更新了以下代码:

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;
    }
}

}

现在我收到以下错误:

无效URL

请求的URL“/feeds/datafeed.ashx?featured=true&format=xml”无效。 参考#9.86cd417.1434453158.409d8a2

以防万一 - 我可以检查 url 并且提要在那里,所以这不是问题。

curl_getinfo的内容:

数组 ( [url] => provided_link [content_type] => text/html [http_code] => 400 [header_size] => 210 [request_size] => 105 [文件时间] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] = > 0.305444 [namelookup_time] => 0.150466 [connect_time] => 0.15239 [pretransfer_time] => 0.303479 [size_upload] => 0 [size_download] = > 260 [speed_download] => 851 [speed_upload] => 0 [download_content_length] => 260 [upload_content_length] => 0 [starttransfer_time] = > 0.305407 [redirect_time] => 0 [certinfo] => 数组 () [primary_ip] => primary_ip_here [primary_port] => 443 [local_ip] => local_ip_这里 [local_port] => 34340 [redirect_url] => )

不确定这是否会改变任何内容,但我从中获取提要的位置当前处于暂存阶段,因此只有在我使用提供的 ip 和域更新我的主机后才能访问。只是为了澄清...我的主机当前更新了所需的信息。

您的用户代理定义不正确,您错过了调用的 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 响应,很可能是因为您没有提供用户代理 header – 一些 Web 服务器需要这个。