在 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_VERIFYHOSTCURLOPT_SSL_VERIFYPEERpost 参数版本不起作用,这很奇怪。只是中性 post 参数的东西。但这对我有用。

以上是关于在 PHP 中使用 curl 加载 Spotify URL 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

我正在使用 php 通过 PHP 和客户端凭据流连接到 spotify 的 API

带有 Spotify 的 OAuth 无法使用 curl 获取刷新令牌

Spotify:发布到 api/token 给出了错误的请求,但在 curl 中工作

多参数 curl 请求 Python、Spotify API

php5.6.27怎么加载curl

无法加载 php_curl