Cakephp httpsocket ssl不适用于控制台shell

时间:2013-03-19 11:26:42

标签: shell cakephp ssl console

我正在尝试使用httpsocket和ssl。

制作一个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);
}   
}

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

但我得到的是: 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在我通过控制器或模型使用它时起作用,但不能通过控制台使用。

有谁知道为什么,以及如何让它发挥作用?

谢谢!甲

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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.dll

中被称为php.ini