2

我正在将 Badgeville REST API 与我的 PHP 5.3、curl 7.22 应用程序集成。

BV 的 API 文档都使用命令行 curl 调用作为示例。当我运行这些示例时,它们运行良好。

当我尝试对 PHP Curl 类做同样的事情时,我总是从 BV 服务器收到 500 错误。

我尝试使用 Chrome 中的 Advanced 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);

休息客户端示例:

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

POST 无标头有效负载:

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

我已经手动创建了命令行 curl 调用并使用 运行它shell_exec(),但我真的不想这样做。

在我的研究中,我发现了一个 Drupal模块,所有的 API 调用都是通过fsockopen()调用完成的。

有没有办法使用 PHP Curl 类成功地进行 Badgeville 调用?

4

1 回答 1

1

事实证明,当 curl 请求进入并设置了标头时,Badgeville 会出现 500 错误。

错误返回代码:

$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

于 2013-03-05T19:20:48.860 回答