当前位置:  开发笔记 > 编程语言 > 正文

PHP cURL错误:"从服务器清空回复"

如何解决《PHPcURL错误:"从服务器清空回复"》经验,为你挑选了2个好方法。

我有一个类函数来连接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;
}

这回来了"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



1> Jan Kubosche..:

常见问题是URL中的空格 - 开头,中间或尾随.你检查出来了吗?

编辑 - 根据下面的评论,间距不是问题.

我运行你的代码并遇到了同样的问题 - 没有任何输出.我尝试了URL并通过GET请求,服务器与我交谈.我会做以下事情:

    使用以下作为$ base_url:$ base_url =' http ://ws.audioscrobbler.com/2.0/?user=bachya&period=&api_key=xxx&method=user.getTopTracks ';

    从您的请求中删除帖子字段.

编辑 我把你的代码移出课堂,因为我没有其余的并修改它.以下代码对我来说非常完美.如果这些更改不适合您,我建议您的错误功能不同.

 '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();

?>



2> cygri..:

服务器收到了您的请求,但发送了空响应.检查结果curl_getinfo($ch, CURLINFO_HTTP_CODE)以确定服务器是否响应了HTTP错误代码.

更新:确定,以便服务器使用100 ContinueHTTP状态代码进行响应.在这种情况下,这应该可以解决您的问题:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

我在这里找到了这个:PHP和cURL:禁用100-continue标头.希望它有效!

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有