4 votes

ouvrir des domaines url en persan avec urllib2

J'essaie d'ouvrir une url http://-./ar/news-events/event/future-internet-privacy avec urllib2. avec le urllib2.urlopen mais il rapporte toujours une erreur.

La même chose se produit avec http://-./ar ... d'autres pages (chinoises) sont ouvertes sans problème.

Une idée pour m'indiquer la bonne façon d'ouvrir ces urls ?

urllib2.urlopen("http://-./ar/news-events/event/future-internet-privacy").read()

urllib2.urlopen('http://-.').read()

[Modifié] l'erreur est :

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  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 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 1170, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.6/urllib2.py", line 1142, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib/python2.6/httplib.py", line 914, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.6/httplib.py", line 951, in _send_request
    self.endheaders()
  File "/usr/lib/python2.6/httplib.py", line 908, in endheaders
    self._send_output()
  File "/usr/lib/python2.6/httplib.py", line 780, in _send_output
    self.send(msg)
  File "/usr/lib/python2.6/httplib.py", line 759, in send
    self.sock.sendall(str)

J'ai aussi essayé avec le u'http://-.'.encode('utf-8') mais l'url résultat ne peut pas être ouvert aussi.

8voto

lunohodov Points 1171

Comme le dit @Donal, l'URL doit être punycodé . Heureusement, Python l'inclut déjà. Voici un exemple de code Python

domain = "الاعلي-للاتصالات.قطر"
domain_unicode = unicode(domain, "utf8")
domain_idna = domain_unicode.encode("idna")
urllib2.urlopen("http://" + domain_idna).read()

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X