Je cours PHP 5.2.6 sur Windows, j'ai extension=php_curl.dll
et extension=php_openssl.dll
décommenté dans php.ini; en tant que tel, je peux voir ce qui suit dans phpinfo
:Comment utiliser le protocole SSL dans 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
Je ne suis pas sûr que d'avoir cURL activé est vital pour cela, mais comme il a mentionné OpenSSL je pensais que je l'inclure ici de toute façon pour être complet.
Ce que je veux faire est simple: faire une requête POST à un autre serveur via SSL à l'aide fsockopen
.
Mon code à ce jour est le suivant:
$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;
}
Cela fonctionne bien bien sûr, si je passe juste à $host
et utiliser le port 80. Mais je vraiment besoin d'envoyer ce sur SSL, et maintenant il ne fonctionne pas. $response
est défini sur false
, $errno
reste à 0
et $errstr
est défini sur php_network_getaddresses: getaddrinfo failed: No such host is known.
. Je sais que ce n'est pas un problème de serveur en panne, ou une faute de frappe dans le nom d'hôte, etc., parce que cela fonctionne si je passe sur le port 80 non sécurisé. Les problèmes ne commencent que lorsque j'essaie de passer à SSL.
Que dois-je faire pour que cela fonctionne?
Pas vraiment lié à la réponse, mais avez-vous envisagé d'utiliser le protocole tls à la place? TLSv1 est essentiellement la quatrième version de SSL, et l'a largement remplacée par l'implémentation SSL de facto. – Powerlord