Sto eseguendo PHP 5.2.6 su Windows, ho extension=php_curl.dll
e extension=php_openssl.dll
non commentato in php.ini; come tale posso vedere quanto segue in phpinfo
:Come posso ottenere il funzionamento SSL in fsockopen?
curl
cURL support enabled
cURL Information libcurl/7.16.0 OpenSSL/0.9.8g zlib/1.2.3
openssl
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.8g 19 Oct 2007
io non sono sicuro che avere cURL permesso è di vitale importanza a questo, ma dal momento che detto OpenSSL ho pensato di includere qui comunque per completezza.
Quello che voglio fare è semplice: fare una richiesta POST a un altro server su SSL utilizzando fsockopen
.
Il mio codice finora è questo:
$host = 'www.redacted.com';
$data = 'user=redacted&pass=redacted&action=redacted';
$response = "";
if ($fp = fsockopen("ssl:{$host}", 443, $errno, $errstr, 30)) {
$msg = 'POST /wsAPI.php HTTP/1.1' . "\r\n";
$msg .= 'Content-Type: application/x-www-form-urlencoded' . "\r\n";
$msg .= 'Content-Length: ' . strlen($data) . "\r\n";
$msg .= 'Host: ' . $host . "\r\n";
$msg .= 'Connection: close' . "\r\n\r\n";
$msg .= $data;
if (fwrite($fp, $msg)) {
while (!feof($fp)) {
$response .= fgets($fp, 1024);
}
}
fclose($fp);
} else {
$response = false;
}
Questo funziona bene, naturalmente, se ho appena passano in $host
e utilizzare la porta 80. Ma ho davvero bisogno di inviare questo su SSL, e in questo momento non sta funzionando. $response
diventa impostato su false
, $errno
rimane su 0
e $errstr
viene impostato su php_network_getaddresses: getaddrinfo failed: No such host is known.
. So che non è un problema che il server sia inattivo, o un errore di battitura nel nome host, ecc., Perché FUNZIONA se vado oltre la porta 80 in modo non sicuro. I problemi iniziano solo quando provo a passare a SSL.
Cosa devo fare per farlo funzionare?
Non proprio correlato alla risposta, ma hai preso in considerazione l'utilizzo del protocollo tls? TLSv1 è essenzialmente la quarta versione di SSL e l'ha ampiamente sostituita come implementazione de facto SSL. – Powerlord