我有一个类函数来连接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;
}
Run Code Online (Sandbox Code Playgroud)
这回来了"Empty reply from server".我知道有些人认为这个错误来自网络基础设施的一些错误; 在我的情况下,我不相信这是真的.如果我通过命令行运行cURL请求,我会得到我的数据; Last.FM服务已启动并可访问.
在我去找那些人并看看是否有任何变化之前,我想和你们一起检查一下,看看我的代码中是否存在导致此问题的问题.
谢谢!
答案: @Jan Kuboschek帮助我偶然发现了(也许)在这里发生的事情.通过提供CURLOPT_POSTFIELDS关联数组,指定了可能不适用于某些RESTful服务的特定内容类型.更智能的解决方案是手动创建该数据的URL编码版本并将其作为传递CURLOPT_POSTFIELDS.
欲了解更多信息,请访问:http://www.brandonchecketts.com/archives/array-versus-string-in-curlopt_postfields
Jan*_*hek 11
常见问题是URL中的空格 - 开头,中间或尾随.你检查出来了吗?
编辑 - 根据下面的评论,间距不是问题.
我运行你的代码并遇到了同样的问题 - 没有任何输出.我尝试了URL并通过GET请求,服务器与我交谈.我会做以下事情:
使用以下作为$ base_url:$ base_url =' http ://ws.audioscrobbler.com/2.0/?user=bachya&period=&api_key=xxx&method=user.getTopTracks ';
从您的请求中删除帖子字段.
编辑 我把你的代码移出课堂,因为我没有其余的并修改它.以下代码对我来说非常完美.如果这些更改不适合您,我建议您的错误功能不同.
<?php
function getTopTracks()
{
$base_url = 'http://ws.audioscrobbler.com/2.0/?user=bachya&period=&api_key=8066d2ebfbf1e1a8d1c32c84cf65c91c&method=user.getTopTracks';
$options = array_merge(array(
'user' => 'bachya',
'period' => NULL,
'api_key' => 'xxxxx...', // obfuscated, obviously
));
$options['method'] = 'user.getTopTracks';
// Initialize cURL request and set parameters
$ch = curl_init($base_url);
curl_setopt_array($ch, array(
CURLOPT_URL => $base_url,
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;
}
echo getTopTracks();
?>
Run Code Online (Sandbox Code Playgroud)
服务器收到了您的请求,但发送了空响应.检查结果curl_getinfo($ch, CURLINFO_HTTP_CODE)以确定服务器是否响应了HTTP错误代码.
更新:确定,以便服务器使用100 ContinueHTTP状态代码进行响应.在这种情况下,这应该可以解决您的问题:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
Run Code Online (Sandbox Code Playgroud)
我在这里找到了这个:PHP和cURL:禁用100-continue标头.希望它有效!
| 归档时间: |
|
| 查看次数: |
51967 次 |
| 最近记录: |