Http code status d'une url en https via php

romegonic Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
romegonic Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je souhaite mettre au point un petit tool de monitoring d'ip et d'url, en php.

Et ce qui m'intéresse exclusivement c'est le code retour, et non le contenu.

Pour cela je dispose de trois arguments principaux, que je peux passer à une fonction, concaténés, ou séparément :
* l'ip (ou fqdn)
* le port
* le contexte (ex : /admin/accueil.php?user=toto)

J'ai essayé plusieurs fonctions qui fonctionnent correctement, en http, en me fournissant directement un status code, ou une chaîne que je peux tronquer pour garder ce fameux status code.

Pour cela je peux utiliser différentes fonctions telles que :

* file_get_contents($url) avec $http_response_header[0]
* $fp=fsockopen($adresse,$port,$errno,$errstr,5); suivi de fwrite($fp,$sortie);
* Des variantes avec curl : en curl_exec de php ou en exec(commande curl en chemin direct)

Mais problème : Aucune d'entre elles ne me permet de récupérer un status code sur une url en https. Je ne reçois rien, ou au mieux un '€'

J'ai essayé des solutions fournies sur certains forums du genre :
fsockopen(ssl://$ip,443,$errno,$errstr,30) au lieu de fsockopen($ip,443,$errno,$errstr,30)
curl tappe l'url directement et je me pren un connection close sans retour de code status.

Alors je vois une autre possibilité, utiliser un telnet qui peut faire du ssl (attention pas du ssh, ça j'ai déjà), mais je ne trouve rien à télécharger (proxy de la société) dans ce sens, et je ne sais pas si les exec($commande) de php retournera quelque chose.

Le pire c'est qu'en commande msdos, ou sous aix, jobtiens des réponses (ssl handshake, ou can not connect suivant l'erreur), sur la commande curl :

curl -v $url_en_https

Merci par avance si vous avez un pitite solution à me proposer :p

A voir également:

3 réponses

jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Ne réinvente pas la roue.
Regarde get_headers
Exemple:
johand@osiris: ~/tmp $ cat get_headers.php 
<?php
$url = 'http://www.alter.be';

print_r(get_headers($url));

print_r(get_headers($url, 1));
?>

johand@osiris: ~/tmp $ php get_headers.php  2>/dev/null
Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Mon, 04 Jun 2012 14:46:10 GMT
    [2] => Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny16 with Suhosin-Patch
    [3] => X-Powered-By: PHP/5.2.6-1+lenny16
    [4] => Set-Cookie: PHPSESSID=820e249d1b7bcb545703474b03d5f298; path=/
    [5] => Expires: Thu, 19 Nov 1981 08:52:00 GMT
    [6] => Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    [7] => Pragma: no-cache
    [8] => Vary: Accept-Encoding
    [9] => Connection: close
    [10] => Content-Type: text/html
)
Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Mon, 04 Jun 2012 14:46:10 GMT
    [Server] => Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny16 with Suhosin-Patch
    [X-Powered-By] => PHP/5.2.6-1+lenny16
    [Set-Cookie] => PHPSESSID=1d38e5e4d3733e894781d2c767a0d8b2; path=/
    [Expires] => Thu, 19 Nov 1981 08:52:00 GMT
    [Cache-Control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    [Pragma] => no-cache
    [Vary] => Accept-Encoding
    [Connection] => close
    [Content-Type] => text/html
)

0
romegonic Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
D'abord, merci pour ta réponse, par contre mon problème persiste.

Ma fonction basée sur ta réponse:

function monitorer($url){
echo $url."<br>";
$tab=get_headers($url);
print_r(get_headers($url));
echo "<br>****************************************<br>";
return $tab[0];
}

L'output lors de l'appel "$statut = monitorer($adresse)" :

Une url en http :

http://10.242.92.228:80/
Array ( [0] => HTTP/1.1 200 OK [1] => Date: Mon, 04 Jun 2012 15:39:31 GMT [2] => Server: IBM_HTTP_Server/7.0.0.13 (Unix) [3] => Content-Length: 2727 [4] => Connection: close [5] => Content-Type: text/html;charset=ISO-8859-1 )
****************************************

Une url en https :

https://10.242.92.223:443/
Warning: get_headers() [function.get-headers]: This function may only be used against URLs. in C:\ROMEGONIC\monitoring\fonctions\fonctions.php on line 97

... Et rien d'autre


quid de mon éventuelle erreur/oubli ?
0
romegonic Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
Bon ben tant pis je parlais d'une récupération de code status sur une url en https, je vois que la seule réponse c'est get_headers avec comme exemples qui fonctionnent ... des urls ... en http.

Je ne réinvente pas la roue en fait, plusieurs forums relaient la même question (formulés par différentes personnes), sans réponse.

ps : Je vois que plus on est humble dans la présentation d'un problème, plus les réponses arrivent en mode YAKAFOKEU, en répondant à côté.
0