Walky 🇫🇷

Cryptoboy
Ancien staff
Inscription
18 Octobre 2012
Messages
1 278
Réactions
1 187
Points
23 400
header.png

Bonjour à tous , aujourd'hui on se retrouve pour un nouveau tutoriel durant lequel je vais vous expliquer les différentes possibilités du client Zend Framework.

Dans chaque bout, j'estimerai que le client Zend Framework est déjà inclut dans le fichier PHP
header2.png
Commençons donc par l'initialisation du client Zend, pour ce faire, il existe 2 méthodes, à vous de choisir laquelle vous convient le mieux
PHP:
// première méthode
$client = new Zend_Http_Client('https://reality-gaming.fr');

// seconde méthode
$client = new Zend_Http_Client();
$client->setUri('https://reality-gaming.fr');
Ici, j'effectue la requête sur RealityGaming. A vous de modifier le lien.
header3.png
Lorsque vous envoyez une requête à un serveur , Zend Framework va utiliser une configuration pré-définie, que vous pouvez bien évidemment modifier ! C'est ce que nous allons voir dans cette partie.
La configuration compte au total 12 paramètres, que voici:
  • maxredirects -> Nombre maximum de redirections à suivre. Par défaut: 5
  • strictredirects -> Si le client doit strictement suivre les RFC (Request For Comments) en redirigeant. Par défaut: false
  • useragent -> L'agent d'utilisateur envoyé dans les headers lors d'une requête. Par défaut: Zend_Http_Client
  • timeout -> Délai d'expiration de la connexion au serveur ciblé (donné en secondes). Par défaut: 10
  • adapter -> La class de l'adaptateur de connexion à utiliser. Par défaut: Zend_Http_Client_Adapter_Socket
  • httpversion -> La version du protocole HTTP. Par défaut: 1.1 (self::HTTP_1)
  • keepalive -> Si le client doit garder une connexion active avec le serveur ciblé. Par défaut: false
  • storeresponse -> Indique s'il faut stocker la dernière réponse du serveur pour pouvoir la récupérer plus tard. Par défaut: true
  • strict -> Indique s'il faut exécuter une validation sur le nom des headers. Par défaut: true
  • encodecookies -> Indique s'il faut passer les valeurs des cookies en utilisant les fonctions PHP urldecode() / urlencode(). Par défaut: true
  • output_stream -> La destination de transmission des données reçues. Par défaut: false
  • rfc3986_strict -> Indique s'il faut adhérer au RFC 3986 (remplacement des '+' par des '%20'). Par défaut: false
Maintenant que nous connaissons tous les paramètres , nous pouvons modifier la configuration de base.
PHP:
// le client est déjà initialisé
$client->setConfig(array(
    'timeout'   => 20, // 20 secondes
    'keepalive' => true, // on garde la connexion active
    'useragent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',
    // etc...
));
header4.png
Grâce au client Zend, nous pouvons envoyer des headers à travers nos requêtes. Cette partie sera donc très courte et très simple
PHP:
// le client est déjà initialisé
$client->setHeaders(array(
    'Accept'       => '*/*',
    'Content-Type' => 'application/x-www-form-urlencoded',
    'Referer'      => 'https://reality-gaming.fr',
    'User-Agent'   => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',
    // etc...
));
header5.png
Vous pensez bien qu'avec le client, il est possible d'envoyer des paramètres à travers votre requête. Nous allons donc voir comment procéder.

Requête POST

PHP:
// le client est déjà initialisé
$client->setParameterPost(array(
    'message' => 'Bonjour',
    'data'    => '{"data":{"money":140,"level":12,"site":"RealityGaming"}}',
    // etc...
));

$request  = $client->request('POST'); // on envoi la requête POST avec les paramètres
$response = $request->getBody(); // on récupère le contenu de la réponse envoyée par le serveur ciblé

Requête GET
PHP:
// le client est déjà initialisé
$client->setParameterGet(array(
    'message' => 'Bonjour',
    'data'    => '{"data":{"money":140,"level":12,"site":"RealityGaming"}}',
    // etc...
));

$request  = $client->request('GET'); // on envoi la requête GET avec les paramètres
$response = $request->getBody(); // on récupère le contenu de la réponse envoyée par le serveur ciblé
Attention ! Ces paramètres n'ont aucun effets sur RealityGaming, c'est seulement à titre d'exemple.
header6.png
Il se peut que le serveur auquel vous voudriez accéder soit protégé par une authentification HTTP. Il faut quand même savoir que si vous ne connaissez pas les identifiants, il vous sera impossible d'envoyer une requête à ce serveur.
PHP:
// le client est déjà initialisé
$client->setAuth('username', 'password');
C'est tout simple, et grâce à cette ligne, le client pourra accéder au serveur !
header7.png
Et oui ! Zend Framework permet d'envoyer également des cookies lors d'une requête ! Une nouvelle fois, c'est très court et super simple.
PHP:
// le client est déjà initialisé
$client->setCookie(array(
    'gold'      => 58,
    'connected' => true,
    'message'   => 'RealityGaming',
    // etc...
));
Une autre fonction permet de maintenir les valeurs des cookies à travers les différentes requêtes et réponses HTTP.
PHP:
// le client est déjà initialisé
$client->setCookieJar();
header8.png
Le client Zend vous permet d'envoyer des fichiers dans vos requêtes ! Nous allons donc voir, comment.
Premièrement, la fonction permettant d'envoyer des des fichiers est définie comme telle
PHP:
public function setFileUpload($filename, $formname, $data = null, $ctype = null)
Il y a donc 4 paramètres. Avant toute chose, il est nécessaire de savoir que si le 3ème paramètre est défini comme NULL, la valeur du premier paramètre est supposée être un fichier sur le disque dur, donc le client Zend essayera de lire ce fichier et ainsi de l'envoyer. Sinon, la valeur du premier paramètre sera envoyée en tant que nom de fichier, cependant il n'est pas nécessaire que le fichier existe sur le disque dur .

Démontrons tout ça en exemple.
PHP:
// le client est déjà initialisé
// ici, on utilise ce que j'ai dis juste au-dessus
$texte = 'Du texte ... !';
$client->setFileUpload('fichier.txt', 'file', $texte, 'text/plain');

// fichier existant
$client->setFileUpload('fichier.xml', 'XMLFile');

Le serveur va donc récupérer cette information grâce à $_FILES['file'] (dans le premier exemple) et $_FILES['XMLFile'] dans le second exemple.
header9.png
Zend Framework propose 4 adaptateurs différents pour exécuter vos requêtes HTTP.
  • Zend_Http_Client_Adapter_Socket (celui par défaut)
  • Zend_Http_Client_Adapter_Proxy
  • Zend_Http_Client_Adapter_Curl
  • Zend_Http_Client_Adapter_Test
Chacun des ces adaptateurs comporte des options de configuration ! Tout au long de cette partie, je vous expliquerai les configurations des adaptateurs.

Zend_Http_Client_Adapter_Socket
Paramètres de configurations:
  • persistent -> Indique s'il faut utiliser des connexions TCP persistantes. Par défaut: false
  • ssltransport -> La couche du transport de la connexion. Par défaut: ssl
  • sslcert -> Routage d'un certificat SSL encodé PEM. Par défaut: null
  • sslpassphrase -> Phrase de passe pour le fichier du certificat SSL. Par défaut: null
  • sslverifypeer -> Indique s'il faut vérifier le certificat SSL. Par défaut: true
  • sslcapath -> Chemin du dossier du certificat SSL. Par défaut: null
  • sslallowselfsigned -> Indique s'il faut accepter les certificats auto-signés. Par défaut: false
  • sslusecontext -> Active les connexions proxy pour utiliser SSL même si le proxy en lui-même ne l'autorise pas. Par défaut: false
Un exemple
PHP:
$client = new Zend_Http_Client();
$client->setUri('https://reality-gaming.fr');

$client->setConfig(array(
    'adapter'       => 'Zend_Http_Client_Adapter_Socket',
    'sslusecontext' => true,
    // etc...
));

// suite ...

Zend_Http_Client_Adapter_Proxy
Paramètres de configurations:
  • proxy_host -> Adresse du serveur proxy
  • proxy_port -> Port du serveur proxy. Par défaut: 8080
  • proxy_user -> Nom d'utilisateur pour se connecter au proxy (si requis)
  • proxy_pass -> Mot de passe pour se connecter au proxy (si requis)
Un exemple
PHP:
$client = new Zend_Http_Client();
$client->setUri('https://reality-gaming.fr');

$client->setConfig(array(
    'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
    'proxy_host' => 'proxy.reality-gaming.fr',
    'proxy_port' => 845,
    'proxy_user' => 'Walky.RG',
    'proxy_pass' => 'SuperPassword'
));

// suite ...
Zend_Http_Client_Adapter_Curl
Cet adaptateur ne contient pas vraiment de paramètres de configurations liés à Zend étant donné que c'est cURL qui gère le tout.
Nous allons donc directement passer à l'exemple.
PHP:
$client = new Zend_Http_Client();
$client->setUri('https://reality-gaming.fr');

$client->setConfig(array(
    'adapter'     => 'Zend_Http_Client_Adapter_Curl',
    'curloptions' => array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_VERBOSE        => true
       // etc ...
    )
));

// suite ...
Je n'expliquerai pas le dernier adaptateur, car je n'en vois pas l'utilité et que beaucoup de choses peuvent déjà être faites avec les autres.
header10.png
Une fois votre requête envoyée, il vous est possible de récupérer plein d'informations. Les voici.
PHP:
// client initialisé + requête envoyée
$client->getUri(); // récupère le lien où la requête a été envoyée
$client->getHeaders(); // récupère les headers de la réponse HTTP
$client->getRedirectionsCount(); // récupère le nombre de redirections que le client a effectué
$client->getCookieJar(); // récupère le cookie jar actuel
$client->getLastRequest(); // récupère la dernière requête HTTP, en tant que texte
$client->getLastResponse(); // récupère la dernière réponse HTTP reçue par le client
$client->getAdapter(); // récupère l'adaptateur utilisé
$client->getStream(); // récupère le statut de transmission pour les données reçues
$client->getBody(); // récupère le contenu de la réponse, en tant que texte
$client->getVersion(); // récupère la version HTTP de la réponse
$client->getStatus(); // récupère le statut du code de la réponse HTTP
$client->getMessage(); // récupère un message décrivant le code de la réponse HTTP
header11.png
C'est donc la fin de ce tutoriel, n'hésitez pas à donner vos avis dessus dans les commentaires.

Walky
 

Ruby.

Undefined
Inscription
25 Avril 2012
Messages
518
Réactions
118
Points
11 846
Un noob il vient ici il sait même à quoi ça sert Zend, ça serait bien de le mettre
 
Haut