2013-03-05 88 views
2

我将Badgeville REST API与我的PHP 5.3,curl 7.22应用程序集成在一起。使用PHP Curl与命令行curl的区别

BV的API文档全部使用命令行卷曲调用作为示例。当我运行这些示例时,它们工作正常。

当我试图用PHP Curl类做同样的事情时,我总是从BV服务器得到一个500错误。

我试图在Chrome中使用高级Rest Rest Client扩展来执行同步功能。

PHP卷曲例子:

$ch = curl_init('http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users.json'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); 

if($this->getRequestType() == 'POST') 
{ 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, 
     array(
      'user[name]' => 'Generic+Username', 
      'user[email]' => 'johndoe%40domainname.com' 
     ); 
    ); 
} 

$response = curl_exec($ch); 

REST客户端,例如:

网址: http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users。 JSON

POST 没有头部有效载荷:

用户[名称] =通用+用户名&用户[邮件] =为johndoe%40domainname.com

我手动创建命令行卷曲电话,跑了与shell_exec(),但我真的不想有这样做。

在我的研究中,我发现Drupal module和所有的API调用通过fsockopen()调用完成。

有没有一些方法可以成功地使用PHP Curl类进行Badgeville调用?

回答

1

事实证明Badgeville有一个500错误,当一个curl请求进来时,它已经设置了头文件。

返回错误代码:

$ch = curl_init('http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users.json'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); 

if($this->getRequestType() == 'POST') 
{ 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, 
     array(
      'user[name]' => 'Generic+Username', 
      'user[email]' => 'johndoe%40domainname.com' 
     ); 
    ); 
} 

$response = curl_exec($ch); 

正常运转的代码:

$ch = curl_init('http://sandbox.v2.badgeville.com/api/berlin/[private_api_key]/users.json'); 
//curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); 

if($this->getRequestType() == 'POST') 
{ 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, 
     array(
      'user[name]' => 'Generic+Username', 
      'user[email]' => 'johndoe%40domainname.com' 
     ); 
    ); 
} 

$response = curl_exec($ch); 

SMH