Http code status d'une url en https via php

Fermé
romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014 - 4 juin 2012 à 16:09
romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014 - 6 juin 2012 à 11:39
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 dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
4 juin 2012 à 16:49
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 lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014
Modifié par romegonic le 4/06/2012 à 17:43
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 lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014
Modifié par romegonic le 6/06/2012 à 11:40
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