1

私はsslで、cakephpシェルにhttpsocketを使用させようとしています。

私の「ストローマン」シェル:

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は、コントローラーまたはモデルを介して使用すると機能しますが、コンソールを介しては機能しません。

誰かがその理由と、それを機能させる方法を知っていますか?

ありがとう!A

4

2 に答える 2

2

コンソールPHPとWebPHPは通常同じではありません。両方とも異なるPHP.iniファイルを持っているため、一部のモジュールはCLIで有効にならず、Webインターフェイスを介して当然のことと見なされます。

CLIに適したPHP.iniを見つけて、SSLモジュールopensslを有効にしてください。

于 2013-03-19T12:04:29.800 に答える
1

マークの答えの上に構築します。

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

*nixopensslディストリビューションをチェックしてください

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

Windowsの場合php_openssl.dllphp.ini

于 2013-03-19T12:32:04.450 に答える