これは2日間私を夢中にさせてきました.curlを使用して、以下に詳述する2つのPHP関数があります。それらはまったく同じ「XMLゲートウェイ」を指しています。唯一の違いは、一方がSSLを介してそれを実行しようとしており、もう一方が暗号化されていないHTTPを介して実行しようとしていることです。
HTTP コネクタ オペレータは期待どおりに動作し、XML ファイルを送信してサーバーの応答を返します。
SSL コネクタは非常にあいまいな「内部サーバー エラーが発生しました。後でもう一度やり直してください。」私の lighttpd エラー ログには何も表示されません。
それが私のWebサーバー構成/openSSL構成かどうか疑問に思っています。どちらも Debian Wheezy 標準パッケージです。SSL_VERIFYPEER と HOST が販売に設定されていることは安全ではありませんが、オプションを使い果たしようとしています。
openssl s_client -connect xmlgw.companieshouse.gov.uk:443 -ssl3
コマンドライン機能
curl https://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway
Web サーバーでも期待どおりに動作します。
PHP 関数:
//SSL post function
public function getSSLCurlResponse($xml) {
$url = "https://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
//HTTP non SSL function
public function getCurlResponse($xml) {
$url = "http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
どんな助けでも本当に感謝します!
ありがとう