在 PHP 中使用 curl 加载 Spotify URL 时出现问题
Posted
技术标签:
【中文标题】在 PHP 中使用 curl 加载 Spotify URL 时出现问题【英文标题】:Problems loading Spotify URL using curl in PHP 【发布时间】:2014-06-27 20:31:55 【问题描述】:在我的localhost
或我的服务器上运行时,我无法加载特定的外部页面。但是,如果我在浏览器中加载页面,它会加载或使用 Postman 加载正常。
我该如何解决这个问题以及 Spotify 如何防止这种情况发生?
我要加载的内容的 URL 是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】:尝试将CURLOPT_POSTFIELDS
设置为true 并像这样设置CURLOPT_POSTFIELDS
中的URL 参数。请注意,由于参数现在位于 CURLOPT_POSTFIELDS
中,因此导致 URL 更改。我将参数设置为一个名为 $post_fields
的数组,因为我发现在调试时以这种方式读取是一种更简单的方法。
更新:post
参数不起作用。但是将CURLOPT_SSL_VERIFYHOST
设置为false
以及将CURLOPT_SSL_VERIFYPEER
设置为false
似乎对我有用。
这是我清理后的代码版本。删除了您的测试并注释掉了我之前认为会有所帮助的 post
参数:
// Set the `url`.
$url="https://embed.spotify.com/?uri=spotify:user:spotify:playlist:4hOKQuZbraPDIfaGbM3lKI";
// Set the `post` fields.
$post_fields = array();
// $post_fields['uri'] = 'spotify:user:spotify:playlist:4hOKQuZbraPDIfaGbM3lKI';
// Set the `post` fields.
$page = get_data($url, $post_fields);
// Echo the output.
echo $page;
// Gets the data from a `url`.
function get_data($url, $post_fields)
$curl_timeout = 5;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_POST, true);
// curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $curl_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_EFFECTIVE_URL);
curl_close($ch);
return $data;
【讨论】:
我修改了代码,因为函数无法访问数组,但是我现在得到Notice: Array to string conversion in \WWW\test.php on line 26 Array
@jamesmstone 好的,请查看我的最新答案。我认为关键是设置CURLOPT_SSL_VERIFYHOST
和CURLOPT_SSL_VERIFYPEER
。 post
参数版本不起作用,这很奇怪。只是中性 post
参数的东西。但这对我有用。以上是关于在 PHP 中使用 curl 加载 Spotify URL 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
我正在使用 php 通过 PHP 和客户端凭据流连接到 spotify 的 API
带有 Spotify 的 OAuth 无法使用 curl 获取刷新令牌
Spotify:发布到 api/token 给出了错误的请求,但在 curl 中工作