即使使用 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 服务器需要这个。
我有一个 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 服务器需要这个。