pb de timeout requete http

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pb de timeout requete http

Re: pb de timeout requete http

par Megadeth » 28 nov. 2013, 14:16

Bah là si tu veux j'ai passé cette ligne :

curl_setopt($ch, CURLOPT_HTTPHEADER, $myheader);

et en amont j'ai déclaré cet header :

$myheader = array(
"Content-type: application/x-www-form-urlencoded",
"Content-Length:". strlen( $strContenu),
"Connection: close"
);

mais typiquement quels autres arguments peuvent être passés ? Que devient l'array "http" de mon file_get_contents ?

Y a du mieux en tout cas j'ai divisé le temps par 2 depuis que je curle du verbe curler ^^

Re: pb de timeout requete http

par xTG » 28 nov. 2013, 14:04

Normal que tu ne trouves rien, car c'est implicite en fait.
Il prend un array avec comme clé le nom du paramètre de la ligne du header que tu souhaites affecter.
Autrement dit tu pourrais retrouver dans cet array l'index Content-Type. ;)

Re: pb de timeout requete http

par Megadeth » 28 nov. 2013, 13:13

Merci xTG,

C'est juste que dans le fucking manuel j'arrive pas à trouver quelles valeurs ou quel format doit avoir mon : CURLOPT_HTTPHEADER

Quand tu tapes "CURLOPT_HTTPHEADER" sous Gougggle bah t'as à boire et à manger mais rien de clair d'où mon insistance de bûcheron car tu sembles plus calé que moi.

Re: pb de timeout requete http

par xTG » 28 nov. 2013, 12:01

Ca fonctionne mais qu'au bout d'une vingtaine de secondes :cry:
Bah un webservice ça répond pas en 0 seconde à ce que je sache non ?
Donc je dirai qu'il met 20 secondes à te répondre tout simplement...
Ou bien que la réponse passe par des chemins fortement engorgé (côté du webservice ou côté de ton serveur) ce qui ralenti d'autant plus le temps de réponse.
Enfin après on part dans des problèmes d'administration réseau...

Pour ton autre question je serai tenté de répondre RTFM... ;)
CURLOPT_HTTPHEADER
CURLOPT_POST
ect
Il y a tout ce qu'il faut dans la documentation pour remplir l'entête HTTP.

Re: pb de timeout requete http

par Megadeth » 28 nov. 2013, 11:51

Je complète le post ci-dessus avec curl je ne peux pas passer le contexte comme dans file_get_contents, comment on fait via curl pour passer le $contexte qui constitue ma requête en somme ? Tu m'suis ?

Re: pb de timeout requete http

par Megadeth » 28 nov. 2013, 11:39

Bonjour,

Désolé, je ne comprends pas bien, c'est un peu le flou artistique.

Pour toi, je n'arriverai pas à mes fins avec file_get_contents ?

Ceci devrait fonctionner normalement :
// Création du contenu brut de la requête
$strContenu=http_build_query($tvarDonnees);
	
// Définition des headers
$headers = http_build_headers( array(
'Content-Type' => 'application/x-www-form-urlencoded',
'Content-Length' => strlen( $strContenu)),'Connection: close' );
 
// Définition du contexte
$options = array( 'http' => array( 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) Gecko/20061010 Firefox/2.0',
'host' => 'monhote',
'method' => 'POST',
'protocol_version' => '1.1',
'timeout' => '3',
'content' => $strContenu,
'header' => $headers ) );
 
// Création du contexte
$contexte = stream_context_create( $options );
 
// Envoi du formulaire POST
$strRetour = file_get_contents( "https://monurl?id=..., false, $contexte );
Ca fonctionne mais qu'au bout d'une vingtaine de secondes :cry:

Re: pb de timeout requete http

par xTG » 27 nov. 2013, 16:58

Restes plus qu'à confirmer que la structure n'est pas remplie lors d'un timeout. :mrgreen:

Peut être faire un curl sur une url qui répond en temps dans un premier lieu ?
Puis tenter de mixer les deux pour voir le contenu de cette structure et comment elle évolue.

Re: pb de timeout requete http

par Megadeth » 27 nov. 2013, 16:10

Re xTG, mauvaise utilisation ou quoi ...

$info = curl_getinfo($ch);
echo 'La requête a mis ' . $info['total_time'] . ' secondes à être envoyée à ' . $info['url'];
var_dump($info);

Résultat :

La requête a mis 0 secondes à être envoyée à https://monurl...id=".$truc array(20) { ["url"]=> string(97) "https://monurl...id=".$truc" ["content_type"]=> NULL ["http_code"]=> int(0) ["header_size"]=> int(0) ["request_size"]=> int(0) ["filetime"]=> int(-1) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0) ["namelookup_time"]=> float(10.004399) ["connect_time"]=> float(0) ["pretransfer_time"]=> float(0) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(0) ["upload_content_length"]=> float(0) ["starttransfer_time"]=> float(0) ["redirect_time"]=> float(0) }

:-k

Ps : print curl_error($ch); retourne "Connection time-out"

Re: pb de timeout requete http

par xTG » 27 nov. 2013, 14:08

Tu peux avoir des informations de retour avec : http://www.php.net/manual/fr/function.curl-getinfo.php
Ainsi tu sauras si dans $result tu as le retour complet ou bien si tu n'as rien d'exploitable (notamment si CURLINFO_TOTAL_TIME est égal à ton timeout).

Re: pb de timeout requete http

par Megadeth » 27 nov. 2013, 13:11

Re,

Je progresse doucement sur le sujet et voulais savoir comment passer de la fonction file_get_contents à un résultat CURL qui semblerait être la solution à mon problème.

Voilà ce que j'ai pour le moment :
$mavar=file_get_contents("https://monurl...id=".$truc,false,$contexte);
et je "voudrais" le même résultat avec les fonctions curl, j'ai ceci pour le moment.
$href = "https://monurl...id=".$truc;
$posts = "";

$ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $href);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
        curl_setopt($ch, CURLOPT_HEADER, 1);
        if ($posts!=""){
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);
        }
        curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_TIMEOUT, 2);
        $result=curl_exec($ch);			
        curl_close($ch);
L'idée est de créer le lien, couper la chique pour reprendre la main.

Merci.

Mega
;)

Re: pb de timeout requete http

par Megadeth » 22 nov. 2013, 17:05

J'ai beau cherché je ne vois pas ce qui bloque, j'ai essayé un peu de curl, fsockopen, des vieilles fonctions de ripat, rien n'y fait.

Je ne comprends déjà pas pourquoi mon timeout et mon connection close ne sont pas pris en compte.

Comment reprendre la main sur mon file_get_contents et catcher le content-length ?

Mega
;)

Re: pb de timeout requete http

par sirakawa » 22 nov. 2013, 11:38

Je viens de penser à qq ch sans avoir testé:
chercher sur gargarisme.com : php barre de progrès....

Re: pb de timeout requete http

par Megadeth » 22 nov. 2013, 11:35

Bonjour, c'est cool tout ce soutien.

J'utilise à la fin un simple file_get_contents.

En fait je passe par des webservices distants mais il y a une connexion qui n'est pas fermée et mon idée était d'aposer mon propre timeout ou bien de tester si le serveur distant m'envoyait encore des choses, sinon je cut. Vous m'suivez ?

Mega
;)

Re: pb de timeout requete http

par sirakawa » 22 nov. 2013, 10:42

Je crains que ce ne soit pas simple:
ceretains téléchargements procèdent en deux temps:
transfert du fichier depuis la machine distante dans un répertoire temporaire (et si on arrêtait le script ici, il faudrait aller à la pêche)
déplacement jusqu'au répertoire désiré.
Je me demande si tous les navigateurs procèdent de la même façon.

Re: pb de timeout requete http

par Mazarini » 22 nov. 2013, 10:42

La requête ne se termine pas toute seule une fois qu'elle a terminé son travail ?
Ne serait ce pas un problème de code qui s'exécute après le traitement de la requête pour faire des taches complémentaires de type cron ?