在PHP中使用curl加载Spotify URL的问题

时间:2014-05-10 00:14:00

标签: php curl spotify

在我的localhost或我的服务器上运行时,我无法加载特定的外部页面。但是,如果我在浏览器中加载页面,它会加载或使用Postman加载它。

我如何解决这个问题以及Spotify如何防止这种情况?

我要加载的内容的网址是this

<?php
$url="https://embed.spotify.com/?uri=spotify:user:spotify:playlist:4hOKQuZbraPDIfaGbM3lKI";
$page = file_get_contents($url);
echo $page; //returns nothing

$page = get_data($url);
echo $page; //returns nothing with a http code of 0

$url="https://www.google.com";
$page = file_get_contents($url);
echo $page; //returns google

$page = get_data($url);
echo $page; //returns google with a http code of 200

/* gets the data from a URL */
function get_data($url) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $data = curl_exec($ch);
    echo curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return $data;
}
?>

1 个答案:

答案 0 :(得分:1)

尝试将CURLOPT_POSTFIELDS设置为true&amp;像这样在CURLOPT_POSTFIELDS中设置网址参数。请注意,URL会因此更改,因为参数现在位于CURLOPT_POSTFIELDS。我将params设置为一个名为$post_fields的数组,因为我发现在调试时这是一种更容易读取的方式。

更新: post参数不起作用。但是将CURLOPT_SSL_VERIFYHOST设置为false以及设置为CURLOPT_SSL_VERIFYPEER的{​​{1}}似乎可以帮助我。

这是我清理过的代码版本。删除了你的测试&amp;评论了false param之前我认为会有所帮助的东西:

post