2017-01-29 1 views
2

Dans le cadre de l'enregistrement de mon site Drupal 7, je demande à l'utilisateur d'entrer un numéro de téléphone valide. Plutôt que de faire une simple validation, j'utilise l'API Numverify.com pour vérifier le format du numéro par pays et obtenir des informations supplémentaires. Ceci est fait via une requête curl qui retourne un objet json.Comment puis-je reproduire une erreur de délai d'attente HTTP 408 pour le test?

L'autre jour, l'API était inaccessible pendant plusieurs heures et, en raison de mon manque de prévoyance, les utilisateurs ne pouvaient pas s'inscrire tant que je n'avais pas contourné la demande d'API. Pour éviter cela à l'avenir, je dois être en mesure de gérer correctement les codes d'erreur tels que 408. Quelqu'un pourrait-il me dire comment je peux répliquer une demande de délai, localement ou autrement, à des fins de test s'il vous plaît?

Répondre

1

Grâce à @hanshenrik, j'ai réussi à combiner sa réponse avec mes propres recherches.

Pour obtenir un 408 (ou toute autre réponse) à des fins de test et de traitement en utilisant curl, j'ai fait un fichier PHP contenant http_response_code(408); puis de mon fichier index.php, j'ai lancé boucle:

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, "timeout.php"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
$result = curl_exec($curl); 
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
curl_close($curl); 

echo $httpcode; 

L'importante line est la section curl_get_info qui renverra le code de réponse http de la page précédente. Je peux ensuite gérer ce code de manière appropriée dans mon fichier index.php.

Je ne sais pas vraiment si c'est la façon la plus efficace de le faire, donc si quelqu'un peut améliorer ma réponse, n'hésitez pas. En attendant, j'espère que cela aidera quelqu'un d'autre là-bas!

0

Vous ne savez pas exactement à propos de D7, mais je sais que vous pouvez utiliser GuzzleHttp pour essayer de capturer RequestException qui inclut les codes de réponse 400 et 500 series. Vous pouvez également définir un délai d'attente, de sorte que s'il ne répond pas dans les X secondes, il suffit de continuer. Vous pouvez également fournir les options CURLOPT_CONNECTTIMEOUT et CURLOPT_TIMEOUT à votre objet cURL, conformément à https://stackoverflow.com/a/11066378/7118098

0

Vous pouvez également simuler un réseau lent avec les dernières versions de Firefox Development Edition. Mais je ne suis pas sûr de combien vous pouvez contrôler la latence. Voir ce article pour plus d'informations sur cette fonctionnalité.

2

faire une page php avec le contenu: <?php http_response_code(408); et aller chercher cela avec curl.

+0

C'est exactement ce que je cherchais, même s'il m'a fallu du temps pour comprendre comment l'utiliser pour ce que je voulais. Merci: D –