2013-03-19 8 views
1

Я пытаюсь использовать оболочку cakephp для использования httpsocket с помощью ssl.Cakephp httpsocket ssl не работает с консольными оболочками

Мой «Strawman» оболочка:

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, так как в этом простом тесте я не предоставил необходимые Params.

Но что я получаю: [email protected] 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

+0

PS: как хорошо работают с нормальной жопой HTTP: // –

ответ

2

Консоль PHP и веб-PHP обычно не совпадают. Оба имеют разные файлы PHP.ini, что приводит к тому, что некоторые модули не включены в CLI, которые вы считаете само собой разумеющимися через веб-интерфейс.

Убедитесь, что вы нашли правильный PHP.ini для CLI и включили там модуль SSL openssl.

+0

Правильно! Как только я понял, что искать, «php -ini» показал мне, что на этом ноутбуке появился третий файл php.ini, о котором я забыл, и у него не было открытий. Обратите внимание на осторожность: установите как xampp, так и wamp на одном компьютере на свой страх и риск, и только когда вам платят за это! –

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 

Для окон, я предполагаю, что это называется php_openssl.dll в php.ini

Смежные вопросы