Дано: PHP 4.4.9, OpenSSL 0.9.8j, Apache 2.0.63
Решение:
Сначала массив сведений данных для коннекта по SSL HTTPS:
$SSL = array ( 'Host'=>'hostssl.domen.local', # URI хоста сервера
'Port'=> 443, # Порт хоста сервера
'Path' => '/cgi-bin/', # путь к скриптам
'User' => 'login', # логин для авторизации
'Pass' => 'password' # пароль для авторизации
);
Вызываем функцию для соединения:
$options = array ( 'var1' => 'value1',
'var2' => 'value2',
'var3' => 'value3'
);
$script = 'script.cgi'; # имя скрипта на стороне сервера
$result = SendDataHTTPS($script, $options);
print $result;
Теперь сама функция:
function SendDataHTTPS($script, $options) {
if (!is_array($options)) return false;
$option='';
foreach ($options as $key=>$row) {
$option .= ($option ? "&" : "?").rawurlencode($key)."=".rawurlencode($row);
}
$sock = fsockopen("ssl://".$SSL['Host'], $SSL['Port'], $errno, $errstr, 15);
if(!$sock) {user_error("$errstr ($errno)\n", E_USER_ERROR); return false;}
fwrite($sock,"GET ".$SSL['Path'].$script.$option." HTTP/1.0\r\n");
fwrite($sock,"Host: ".$SSL['Host']."\r\n");
fwrite($sock,"Content-type: text/plain\r\n");
fwrite($sock,"Authorization: Basic ".base64_encode($SSL['User'].":".$SSL['Pass'])."\r\n");
fwrite($sock,"Connection: close\r\n\r\n");
$headers = '';
while($str = trim(fgets($sock,4096)))
$headers .= "$str\n";
$body = '';
while(!feof($sock))
$body .= @fgets($sock,4096);
fclose($sock);
return $body;
}
Примечание:
Стоит заметить, данное решение средствами GET запроса,
для POST запроса немного подправляется и юзается не менее успешно.
Комментариев нет:
Отправить комментарий