HTTP_Request2 でのSSL通信でのPOST送信
オレオレ証明書を使用しているサーバへHTTP_Request2を使って通信をする時にちょっと悩まされたのでメモ。
デフォルトの設定で実行すると、エラーコード0を返してきて原因解明までに無駄な時間を要したのでここにメモ。
hoge='fuga' の値を https://foo.bar にPHPから送信してXMLデータを取得。
ただし、foo.barはオレオレ証明書(自己証明書)であるため、ちょっとした設定が必要。
キーとなるのは
<?php // SSLサーバ証明書の検証を要求するか(デフォはtrue) HTTP_Request2::setConfig('ssl_verify_peer', false); // 自己証明書を許可するか(デフォはtrue) HTTP_Request2::setConfig('ssl_verify_host', false);
以上の点を踏まえて対応したコードが以下の通り。
リクエスト送信してXMLデータを取得するまでのコード。
バーチャルホストで foo.bar 設定されてるけど、DNSで解決できないのでIPアドレスで指定する方法もついでに記載。
<?php $request = new HTTP_request2(); // SSLサーバ証明書の検証を要求するか(デフォはtrue) HTTP_Request2::setConfig('ssl_verify_peer', false); // 自己証明書を許可するか(デフォはtrue) HTTP_Request2::setConfig('ssl_verify_host', false); // 接続先URL設定 $request->setUrl('https://192.168.0.1/'); // VirtualHost用にヘッダーを追加 $request->setHeader('HOST', 'foo.bar'); // POSTパラメータ設定 $request->setMethod(HTTP_Request2::METHOD_POST); $request->addPostParameter('hoge', 'fuga'); $response = $request->send(); $xml = simplexml_load_string($response->getBody());
あとは、$xmlを好きにすればよいだけ!
基本をしっかり押さえておけばらくちんぽんだね。