J'aimerais pouvoir établir une connexion réseau via fsocketopen() sur le port 443 (du ssl)
Ce que j'arrive à faire: c'est
1) etablir une connexion avec fsocketopen() et après avoir générer plus ou moins manuellement mon entete http en utilisant le port 80.
2) Je sais établir des connexions réseau sur le port 443 grâce à cURL, mais là ce qui m'intéresse c'est de pouvoir construire à la main mon entête http, c'est pour cela que dans ce cas précis je veux passer par fsocketopen().
VOICI MON CODE:
(lorsque le port vaut 80, cela fonctionne, mais si je mets 443, ça ne passe pas)
$id="id:smdp";
$id64=base64_encode($id);//echo $id64;
$serveur="www.monsite.com";
//$port=80;
$port=443;
$sock = fsockopen("$serveur", $port, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");
$mots_cles="toto";
$data = "mots_cles=" . urlencode($mots_cles);
$methode="POST";
$uri="/dossier/page.php";
$header_demande="$methode $uri HTTP/1.1\r\n";
$header_demande.="Host: $serveur\r\n";
$header_demande.="Content-type: application/x-www-form-urlencoded\r\n";
$header_demande.="Content-length: " . strlen($data) . "\r\n";
$header_demande.="Accept: */*\r\n";
$header_demande.="Authorization: BASIC $id64\r\n";
$header_demande.="\r\n";
echo nl2br($header_demande);
fputs($sock,$header_demande);
$headers = "headers= ";
while ($str = trim(fgets($sock, 4096)))
{
$headers .= "$str\n";
}
echo nl2br($headers);
echo "\n";$body = "";
while (!feof($sock))
{
$body .= fgets($sock, 4096);
}
fclose($sock);
echo $body;
REMARQUE : la reponse est :
Bad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
En gros ma requête http ne passe pas sur un port destiné au https.
Alors du coup , je me renseigne et je tombe sur le net sur un bout de code qui dit :
<?php
// preconditions
$port = 80 | 443
$host = "www.example.com";
$method = "POST" | "GET";
$contenttype = "text/html" | "text/plain" | "text/xml" | ...;
$data = "<something>";
// script
if($port == 443)
$sslhost = "ssl://".$host;
else
$sslhost = $host;
$fp = fsockopen($sslhost, $port);
fputs($fp, "$method $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: $contenttype\r\n");
fputs($fp, "Content-length: ".strlen($data)."\r\n");
fputs($fp, "Connection: close\r\n");
fputs($fp, "\r\n");
?>
(source =
http://fr.php.net/fsockopen)
malheureusement si je tente d'utiliser :
fsockopen("ssl://$serveur", $port, $errno, $errstr, 30);
cela me renvoie l'erreur:
Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://web.fusacq.com:443 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?) in c:\chemin\page.php on line 18
alors je veux bien parametrer mon PHP pour le "socket transport ssl" comme on me dit, mais je ne sais absolument pas comment faire!
Quelqu'un le saurait-il?
NB: si quelqu'un sait comment passer des login et mot de passe de connexion grâce à curl (l'équivalent de $header_demande.="Authorization: BASIC $id64\r\n"; je suis preneur également.
alors je viens de trouver qq chose d'interessant qui concerne curl :
curl_setopt ($ch, CURLOPT_USERPWD, 'login:motdepasse');
Avec cela on peut passer les identifiants en parametres, mais bon, j'aimerais quand même savoir s'il y a un espoir avec fsocketopen();
J'aimerais pouvoir établir une connexion réseau via fsocketopen() sur le port 443 (du ssl)
Ce que j'arrive à faire: c'est
1) etablir une connexion avec fsocketopen() et après avoir générer plus ou moins manuellement mon entete http en utilisant le port 80.
2) Je sais établir des connexions réseau sur le port 443 grâce à cURL, mais là ce qui m'intéresse c'est de pouvoir construire à la main mon entête http, c'est pour cela que dans ce cas précis je veux passer par fsocketopen().
VOICI MON CODE:
(lorsque le port vaut 80, cela fonctionne, mais si je mets 443, ça ne passe pas)
[php]$id="id:smdp";
$id64=base64_encode($id);//echo $id64;
$serveur="www.monsite.com";
//$port=80;
$port=443;
$sock = fsockopen("$serveur", $port, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");
$mots_cles="toto";
$data = "mots_cles=" . urlencode($mots_cles);
$methode="POST";
$uri="/dossier/page.php";
$header_demande="$methode $uri HTTP/1.1\r\n";
$header_demande.="Host: $serveur\r\n";
$header_demande.="Content-type: application/x-www-form-urlencoded\r\n";
$header_demande.="Content-length: " . strlen($data) . "\r\n";
$header_demande.="Accept: */*\r\n";
$header_demande.="Authorization: BASIC $id64\r\n";
$header_demande.="\r\n";
echo nl2br($header_demande);
fputs($sock,$header_demande);
$headers = "headers= ";
while ($str = trim(fgets($sock, 4096)))
{
$headers .= "$str\n";
}
echo nl2br($headers);
echo "\n";$body = "";
while (!feof($sock))
{
$body .= fgets($sock, 4096);
}
fclose($sock);
echo $body;[/php]
REMARQUE : la reponse est :
[quote][size=150][b]Bad Request[/b][/size]
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.[/quote]
En gros ma requête http ne passe pas sur un port destiné au https.
Alors du coup , je me renseigne et je tombe sur le net sur un bout de code qui dit :
[php]
<?php
// preconditions
$port = 80 | 443
$host = "www.example.com";
$method = "POST" | "GET";
$contenttype = "text/html" | "text/plain" | "text/xml" | ...;
$data = "<something>";
// script
if($port == 443)
$sslhost = "ssl://".$host;
else
$sslhost = $host;
$fp = fsockopen($sslhost, $port);
fputs($fp, "$method $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: $contenttype\r\n");
fputs($fp, "Content-length: ".strlen($data)."\r\n");
fputs($fp, "Connection: close\r\n");
fputs($fp, "\r\n");
?>
[/php]
(source = http://fr.php.net/fsockopen)
malheureusement si je tente d'utiliser :[quote] fsockopen("ssl://$serveur", $port, $errno, $errstr, 30);[/quote]
cela me renvoie l'erreur:
[quote]Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://web.fusacq.com:443 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?) in c:\chemin\page.php on line 18[/quote]
alors je veux bien parametrer mon PHP pour le "socket transport ssl" comme on me dit, mais je ne sais absolument pas comment faire!
Quelqu'un le saurait-il?
NB: si quelqu'un sait comment passer des login et mot de passe de connexion grâce à curl (l'équivalent de $header_demande.="Authorization: BASIC $id64\r\n"; je suis preneur également.
alors je viens de trouver qq chose d'interessant qui concerne curl :
[quote]curl_setopt ($ch, CURLOPT_USERPWD, 'login:motdepasse');[/quote]
Avec cela on peut passer les identifiants en parametres, mais bon, j'aimerais quand même savoir s'il y a un espoir avec fsocketopen();