我正在尝试使用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在我通过控制器或模型使用它时起作用,但不能通过控制台使用。
有谁知道为什么,以及如何让它发挥作用?
谢谢!甲
答案 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