J'essaie de me connecter à un service Web en utilisant IO :: Socket :: INET (oui, je sais qu'il y a beaucoup de meilleurs modules pour cela, mais je ne sais pas Je les ai et je ne peux pas les ajouter, alors ne le suggérez pas), mais je pars (je pense que c'est ce qu'il fait) attendre une réponse.IO :: Délai d'attente lors de l'obtention de la réponse
est ici le point crucial de base de mon code (je remplir préalablement le contenu avec tous les en-têtes appropriés, et mis en place, etc.):
$httpSock->print($content);
my @lines = $httpSock->getlines();
foreach my $line (@lines) {
print $line;
}
Il semble que ma demande est faite immédiatement, il attend environ 2 minutes avant de cracher la réponse. Si je modifie le code pour utiliser une socket raw recv
au lieu de getlines()
, ala:
$httpSock->recv($data, 1024);
Je reçois immédiatement la réponse (bien que seuls les 1024 premiers caractères). Est-ce que je fais quelque chose de mal ici? J'utilise une version assez tardive de IO :: Socket que autoflush
devrait être activé par défaut, mais l'allumer explicitement ne semble pas faire de différence. Je pourrais probablement aussi continuer à lire à partir de la socket jusqu'à ce que je reçois la réponse entière, mais c'est certainement plus désordonné que d'utiliser getlines()
ou <$httpSock>
.
Merci d'avance.
Oui, c'est assez proche de ce que j'ai. Une enquête plus approfondie me porte à croire que c'est une question d'EOF d'une certaine sorte. Si j'utilise 'getline()' (dans une boucle), il saisit tout sauf la dernière ligne. Si j'utilise 'recv()' il recevra toutes les données sauf le dernier bit. Est-ce que cela vous aide? – Morinar
Je suis également en train d'effectuer un POST plutôt qu'un HEAD ou un GET. Je ne sais pas si cela fait une différence ... – Morinar
Votre exemple fonctionne également pour moi, mais si vous changez HTTP/1.0 en HTTP/1.1 (ce que j'utilisais) votre exemple se bloque comme le mien. Quelle est la différence entre HTML/1.0 et HTML/1.1? – Morinar