J'espère que c'est une question assez simple, mais ça me rend fou. J'utilise Python 2.7.3 sur une installation hors de la boîte du serveur Ubuntu 12.10. J'ai continué à zoomer sur le problème jusqu'à ce que je suis arrivé à cet extrait:
import urllib2 x=urllib2.urlopen("http://casacinema.eu/movie-film-Matrix+trilogy+123+streaming-6165.html", timeout=5)
3 Réponses :
On dirait que vous rencontrez la question du proxy. Voici une excellente explication sur la façon de travailler: Essayer d'accéder à Internet à l'aide d'Urllib2 à Python .
J'ai exécuté votre code sur mon Ubuntu avec Python 2.7.3 et n'ai vu aucune erreur. P>
aussi, envisagez d'utiliser Demandes : P>
import requests response = requests.get("http://casacinema.eu/movie-film-Matrix+trilogy+123+streaming-6165.html", timeout=5) print response.status_code
Eh bien .. je n'ai pas configuré de proxy sur mon serveur ... Je ne suis pas sûr de ce que je dois faire .. Comment puis-je détecter la présence d'un proxy que je dois configurer?
Veuillez également noter que je suis sur un serveur Web avec une adresse IP publique, qui est correctement détectée de l'extérieur ..
Il réussit également à charger d'autres pages Web sans aucune difficulté. Seules certaines pages ne se chargeront tout simplement pas et pendent pour toujours ..
Merci. HM, d'abord voir si smth est dans http_proxy code> env variable ( Stackoverflow.com/questions/7338837/... ). Avez-vous essayé le code à l'aide de
demandes code>?
Oui, j'ai essayé votre code en utilisant des demandes et il est passé exactement comme l'autre. La variable http_proxy env est NULL sur mon système ...! Étrange, n'est-ce pas?
Oui. Veuillez essayer 2 choses plus: urllib2.urlopen ('http://google.com') code> et
curl http://casacinema.eu/movie-film-matrix+trilogy+123+ Streaming -6165.html code>. Que vois-tu?
Urlopen sur Google lit la page immédiatement et sans problème, CURL est suspendu indéfiniment sans aucune sortie.
Ainsi, on dirait que la question n'est pas pertinente pour Python / Urllib. Vous ne pouvez tout simplement pas accéder à casacinema.eu code> à partir du bloc de pare-feu?
Je n'ai pas vraiment besoin de ça pour être chargé. Ce serait suffisant si, après un certain temps, Python a eu le temps de lancer une exception. Casacinema.eu n'était qu'un exemple de quelque chose de suspendu! Je veux juste qu'il arrête d'essayer après un moment et de continuer! Est-ce possible en quelque sorte? Il doit y avoir un moyen !!
Oui, je l'ai eu. Veuillez essayer de définir le délai d'attente via socket code>:
prise d'importation; socket.setDefaulttimeout (5) code>.
Déjà fait! Ce n'est pas allé sur le temps d'attente de toute façon. En fait, il fait du temps sur tout autre système (sur mon ordinateur portable, mais pas sur mon serveur.
Je vais fou de ça.
@Matteomonti Avez-vous trouvé votre problème?
UHMM Oui, je pense que je l'ai fait, mais qu'il y a deux ans, je ne me souviens vraiment pas de la façon dont! Désolé pour ça..
L'affiche originale indiquait qu'ils ne comprenaient pas pourquoi cela se bloquerait, mais ils souhaitaient également un moyen de garder Le Le meilleur moyen de diagnostiquer ceci est d'obtenir la sortie RAW de la réponse du serveur et de le comparer avec une autre réponse de serveur que vous connaissez fonctionne. Ensuite, si vous devez créer un serveur et manipuler la réponse pour déterminer exactement quelle différence est la cause. Peut-être que cela peut mener au moins de changer sur le serveur et de lui permettre de ne pas suspendre. P> urllib.request.urlopen code> de la suspension. Je ne peux pas dire comment le garder de la suspension mais si cela aide quelqu'un c'est pourquoi il peut accrocher. P>
python-urllib / 3.6 code> est difficile. Il s'attend, par exemple, le serveur de retourner
http / 1.1 200 ok code> pas
http 200 ok ok code>. Il s'attend également à ce que le serveur ferme la connexion lorsqu'il envoie une connexion
: fermer code> dans les en-têtes. P>
peut essayer d'utiliser socket.setDefaulttimeout (5) comme alecxe suggérées.
Le support Python pour récupérer des ressources à partir de la bande est superposé. URLLIB2 utilise la bibliothèque HTTPLIB, qui utilise à son tour la bibliothèque de socket. P> AS de Python 2.3 Vous pouvez spécifier la durée pendant laquelle une prise doit attendre une réponse avant de terminer une réponse. Cela peut être utile dans des applications qui doivent chercher des pages Web. Par défaut, le module de socket n'a pas de délai et peut accrocher. Actuellement, le délai d'attente de socket n'est pas exposé aux niveaux HTTPLIB ou URLLIB2. Cependant, vous pouvez définir le délai d'attente par défaut globalement pour toutes les prises utilisant P> Sockets et couches h2 >
J'ai le même problème. Apparemment, c'est un bug dans urllib2.
À une rare occasion, j'ai vu cela avec Python 2.6.x
Dans mon cas, c'était une question de pare-feu. Mon pare-feu local Lulu bloquait toutes les demandes de Python. Supprimer cette règle résolue cette question.