1

我正在尝试使用带有 ssl 的 httpsocket 制作 cakephp shell。

我的“稻草人”外壳:

App::uses('HttpSocket', 'Network/Http');

class UpdaterShell extends AppShell {

public function main() {      
    // STRAWMAN
    $httpSocket = new HttpSocket();
    $results = $httpSocket->post(
        'https://accounts.google.com/o/oauth2/token',
        'foo=bar'
    );
    debug($results);
}   
}

现在,我不希望 Google 做出成功的回应,因为在这个简单的测试中,我没有提供必要的参数。

但我得到的是:Error@ unable to find the socket transport "ssl" - did you forget to enable it when you configured php?

我没有,openssl 已启用,为了证明这一点,这有效:

App::uses('AppController', 'Controller');
App::uses('HttpSocket', 'Network/Http');

class StrawmanController extends AppController {

public function index() {
    // STRAWMAN
    $httpSocket = new HttpSocket();
    $results = $httpSocket->post(
        'https://accounts.google.com/o/oauth2/token',
        'foo=bar'
    );
    debug($results);   
}  
}

(通过作品,我的意思是用“invalid_request”回应。)

总结一下:当我通过控制器或模型使用 openssl 时,它可以工作,但不能通过控制台使用。

有谁知道为什么,以及如何使它工作?

谢谢!一个

4

2 回答 2

2

控制台 PHP 和 web PHP 通常是不一样的。两者都有不同的 PHP.ini 文件,因此导致某些模块未在 CLI 中启用,您通过 Web 界面认为这是理所当然的。

确保为 CLI 找到正确的 PHP.ini 并在那里启用 SSL 模块 openssl。

于 2013-03-19T12:04:29.800 回答
1

建立在Mark的回答之上。

$httpSocket = new HttpSocket();
$request = array(
         'method' => 'POST',
         'uri' => array(
                    'schema' => 'https',
                    'host' => 'www.samplewebsite.com',
                    'path' => 'put/your/path/here'
                    )
     );
$result = $httpSocket->request($request);

查看 openssl*nix发行版

 php -r "phpinfo();" | grep ssl

对于windows,我猜它被调用php_openssl.dllphp.ini

于 2013-03-19T12:32:04.450 回答