etiqueta vacía o demasiado larga – python urllib2

Estoy teniendo una situación extraña:

Me estoy curling urls como este:

def check_urlstatus(url): h = httplib2.Http() try: resp = h.request("http://" + url, 'HEAD') if int(resp[0]['status']) < 400: return 'ok' else: return 'bad' except httplib2.ServerNotFoundError: return 'bad' 

Si bash probar esto con:

 if check_urlstatus('.f.de') == "bad": #<--- error happening here #.. #.. 

está diciendo:

 UnicodeError: label empty or too long 

¿Cuál es el problema que estoy causando aquí?

EDIT : aquí está la traza con idna. Supongo, trata de dividir la entrada por . y en este caso, la primera etiqueta está vacía, que es el ritmo anterior a la primera . .

introduzca la descripción de la imagen aquí

El problema es que su URL no se puede codificar correctamente según las reglas de IDNA , que gobiernan cómo se convierten los nombres de dominio internacionalizados:

Las conversiones entre las formas ASCII y no ASCII de un nombre de dominio se realizan mediante algoritmos llamados ToASCII y ToUnicode. Estos algoritmos no se aplican al nombre de dominio en su totalidad, sino a tags individuales. Por ejemplo, si el nombre de dominio es http://www.example.com, entonces las tags son www, example y com. ToASCII o ToUnicode se aplican a cada uno de estos tres por separado .

Los detalles de estos dos algoritmos son complejos y se especifican en RFC 3490. A continuación se ofrece una descripción general de su función.

ToASCII no modifica ninguna etiqueta ASCII, pero fallará si la etiqueta no es adecuada para el Sistema de nombres de dominio. Si se le asigna una etiqueta que contiene al menos un carácter no ASCII, ToASCII aplicará el algoritmo Nameprep, que convierte la etiqueta en minúsculas y realiza otra normalización, y luego traducirá el resultado a ASCII utilizando Punycode [16] antes de presentar los cuatro caracteres. cadena “xn -“. [17] Esta cadena de cuatro caracteres se denomina prefijo de encoding compatible con ASCII (ACE, por sus siglas en inglés) y se utiliza para distinguir las tags codificadas en Punycode de las tags ASCII comunes. El algoritmo ToASCII puede fallar de varias maneras; por ejemplo, la cadena final podría exceder el límite de 63 caracteres de un nombre DNS. Una etiqueta para la cual ToASCII falla no se puede usar en un nombre de dominio internacionalizado.

En su caso, un ” (en blanco) no es un carácter de nombre de dominio válido, y termina con esto:

 >>> '.f.de'.encode('idna') Traceback (most recent call last): File "", line 1, in  File "/usr/lib/python2.6/encodings/idna.py", line 164, in encode result.append(ToASCII(label)) File "/usr/lib/python2.6/encodings/idna.py", line 73, in ToASCII raise UnicodeError("label empty or too long") UnicodeError: label empty or too long 

Si cambia el nombre de dominio a ‘afde’, no debería generar esta excepción.