我有一个用于与Last.FM RESTful API接口的类函数 - 它的目的是获取我用户的最新曲目。以下是代码:
private static $base_url = 'http://ws.audioscrobbler.com/2.0/';
public static function getTopTracks($options = array())
{
$options = array_merge(array(
'user' => 'bachya',
'period' => NULL,
'api_key' => 'xxxxx...', // obfuscated, obviously
), $options);
$options['method'] = 'user.getTopTracks';
// Initialize cURL request and set parameters
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => self::$base_url,
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $options,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
));
$results = curl_exec($ch);
return $results;
}
这会返回
"服务器未响应"
。有人建议该错误来自于网络基础设施的某个故障;但在我的情况下,我不认为是这样。如果我通过命令行运行cURL请求,我可以得到数据;Last.FM服务正常并可访问。在我联系相关人员之前,想先与您核实,看看是否存在导致此问题的代码问题。
谢谢! 答案: @Jan Kuboschek帮助我发现了这里可能出现的问题。通过给
CURLOPT_POSTFIELDS
提供一个关联数组,指定了特定的内容类型,这可能无法与某些RESTful服务一起使用。更明智的解决方案是手动创建一个URL编码版本的数据,并将其作为CURLOPT_POSTFIELDS
传递。有关更多信息,请查看:http://www.brandonchecketts.com/archives/array-versus-string-in-curlopt_postfields
false
... 我不想公开我的API密钥,但它们很容易获得。 - ABach