Python urllib et urllib2 de ne pas ouvrir localhost Url?
En Python je peux utiliser urllib2 (et urllib) pour ouvrir des Url externes tels que Google. Cependant, je suis frapper des problèmes lors de l'ouverture de localhost Url. J'ai un python SimpleHTTPServer exécute sur le port 8280 qui je peux naviguer avec succès à l'aide de http://localhost:8280/.
python -m SimpleHTTPServer 8280
Il est également intéressant de noter que je suis sur Ubuntu qui a CNTLM en cours d'exécution pour gérer l'authentification pour notre entreprise de proxy web. Par conséquent, wget ne fait pas travailler avec localhost soit, donc je ne pense pas que ce soit un urllib question!
Script de Test (test_urllib2.py):
import urllib2
print "Opening Google..."
google = urllib2.urlopen("http://www.google.com/")
print google.read(100)
print "Google opened."
print "Opening localhost..."
localhost = urllib2.urlopen("http://localhost:8280/")
print localhost.read(100)
print "localhost opened."
De sortie:
$ ./test_urllib2.py
Opening Google...
<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><
Google opened.
Opening localhost...
Traceback (most recent call last):
File "./test_urllib2.py", line 10, in <module>
localhost = urllib2.urlopen("http://localhost:8280/")
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.6/urllib2.py", line 429, in error
result = self._call_chain(*args)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 605, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
r = h.getresponse()
File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
response.begin()
File "/usr/lib/python2.6/httplib.py", line 391, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
raise BadStatusLine(line)
httplib.BadStatusLine
SOLUTION: Le problème était, en effet, parce que je suis en utilisant CNTLM derrière notre entreprise de proxy web (détails de pourquoi cela a provoqué un problème je ne peux pas être sûr). La solution a été d'utiliser le ProxyHandler:
proxy_support = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy_support)
print opener.open("http://localhost:8380/").read(100)
Grâce à loki2302 pour me pointer ici.
except:
sans Exception et merci de nous montrer l'exception soulevée par urllib2.urlopen
.stackoverflow.com/questions/201515/...
Le
BadStatusLine
exception suggère un mal formée en-tête de réponse du serveur. Pourriez-vous avoir un coup d'oeil et voir ce qui est retourné?OriginalL'auteur ryan | 2011-08-10
Vous devez vous connecter pour publier un commentaire.
Vérifiez si le problème est vraiment dans l'ouverture de localhost, ou si JBoss donne de réponse non valide (que le navigateur contourne):
wget http://localhost:8280/
vous pouvez essayer d'exécuter un simple Python serveur HTTP pour tester autre chose que de JBoss:
On dirait que vous avez proxy qui obtient aussi utilisé pour localhost/127.0.0.1. Selon la façon dont il est défini (je ne sais pas à propos de CNTLM), il peut être possible de faire une exception pour localhost.
Aussi, le lien par loki2302 dans la question des commentaires peut être utile, il contient une recette sur la façon d'ignorer les paramètres de proxy, donc (sauf si vous avez un proxy transparent ou forcés dans certains autres), il peut vous aider.
Accepter cela comme réponse j'ai eu un tri, j'ai utilisé le lien en loki2302 de trouver la solution. Je vais modifier ma question avec la solution de référence pour l'avenir. Merci encore Senko.
OriginalL'auteur Senko Rašić
essayez d'utiliser urllib:
OriginalL'auteur Arthur Neves
J'ai aussi eu ce problème dans mon serveur. Mais la racine du problème est que mon serveur était seul thread et ne peut répondre à une demande. Ainsi, durant le processus de demande, il ne peut pas répondre à une autre url que j'ai demandé dans urllib2
OriginalL'auteur Masood Moshref Javadi