Je suis d'accord avec ddaa. Cependant, si vous voulez comprendre ce genre de chose, vous pouvez configurer un serveur fictif en utilisant quelque chose comme nc
(dans * nix) et ensuite ouvrir l'URL dans l'interpréteur Python interactif.
Dans un terminal, exécutez nc -l 1234
pour ouvrir une socket et écouter les connexions sur le port 1234 de la machine locale. nc
accepte une connexion entrante et affiche tout ce qu'il lit depuis le socket. Tout ce que vous tapez dans nc
sera envoyé sur le socket à la connexion à distance, dans ce cas urlopen()
de Python.
Run Python dans un autre terminal et entrez votre code, à savoir
data = urllib2.urlopen('http://127.0.0.1:1234')
data.read()
L'appel à urlopen()
établira la connexion au serveur, envoyer la demande et bloquer en attente d'une réponse. Vous verrez que nc
imprime la requête HTTP dans son terminal.
Tapez maintenant quelque chose dans le terminal qui exécute nc
. L'appel à urlopen()
bloquera toujours jusqu'à ce que vous appuyez sur ENTRÉE dans nc
, c'est-à-dire, jusqu'à ce qu'il reçoive un nouveau caractère de ligne. Donc urlopen()
ne reviendra pas tant qu'il n'aura pas lu au moins un nouveau caractère de ligne. (Pour ceux qui sont préoccupés tamponnage possible par nc
, ce n'est pas un problème. urlopen()
bloquera jusqu'à ce qu'il voit le premier caractère de nouvelle ligne.)
Il convient de noter que urlopen()
va bloquer jusqu'à ce que le premier caractère de nouvelle ligne est reçue , après quoi les données peuvent être lues à partir de la connexion. En pratique, les réponses HTTP sont des réponses multilignes courtes, donc urlopen()
devrait revenir assez rapidement.
merci pour la réponse rapide – user20955
Dans la documentation, il est indiqué: function renvoie un objet de type fichier. Donc je suppose que Ddaa a raison. – Mapad
"File-like" fait simplement référence à l'interface offerte par l'objet. Ce que j'ai décrit si le comportement que vous obtenez naturellement hors des sockets TCP si toutes les données ne sont pas téléchargées dans le .urlopen(), ce qui serait vaincre le point d'une interface de type fichier. – ddaa