Estoy jugando, intentando escribir algún código para usar las API tr.im para acortar una URL.Python urllib2, autenticación HTTP básica y tr.im
Después de leer http://docs.python.org/library/urllib2.html, he intentado:
TRIM_API_URL = 'http://api.tr.im/api'
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='tr.im',
uri=TRIM_API_URL,
user=USERNAME,
passwd=PASSWORD)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen('%s/trim_simple?url=%s'
% (TRIM_API_URL, url_to_trim))
url = response.read().strip()
response.code es de 200 (creo que debe ser 202). url es válido, pero la autenticación HTTP básica no parece haber funcionado, porque la URL acortada no está en mi lista de URL (en http://tr.im/?page=1).
Después de leer http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly También probé:
TRIM_API_URL = 'api.tr.im/api'
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, TRIM_API_URL, USERNAME, PASSWORD)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://%s/trim_simple?url=%s'
% (TRIM_API_URL, url_to_trim))
url = response.read().strip()
Pero consigo los mismos resultados. (Response.code es de 200 y el URL es válida, pero no registrado en mi cuenta en http://tr.im/.)
Si utilizo los parámetros de consulta de cadenas en lugar de la autenticación básica HTTP, como esto:
TRIM_API_URL = 'http://api.tr.im/api'
response = urllib2.urlopen('%s/trim_simple?url=%s&username=%s&password=%s'
% (TRIM_API_URL,
url_to_trim,
USERNAME,
PASSWORD))
url = response.read().strip()
. ..then no solo es válida la URL, sino que está registrada en mi cuenta tr.im. (Aunque response.code sigue siendo 200.)
Debe haber algo malo en mi código, aunque (y no de API Tr.im), ya
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... devuelve:
{"trimpath":"hfhb","reference":"nH45bftZDWOX0QpVojeDbOvPDnaRaJ","trimmed":"11\/03\/2009","destination":"http:\/\/www.google.co.uk\/","trim_path":"hfhb","domain":"google.co.uk","url":"http:\/\/tr.im\/hfhb","visits":0,"status":{"result":"OK","code":"200","message":"tr.im URL Added."},"date_time":"2009-03-11T10:15:35-04:00"}
... y la URL aparece en mi lista de URL en http://tr.im/?page=1.
Y si me quedo:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... otra vez, me sale:
{"trimpath":"hfhb","reference":"nH45bftZDWOX0QpVojeDbOvPDnaRaJ","trimmed":"11\/03\/2009","destination":"http:\/\/www.google.co.uk\/","trim_path":"hfhb","domain":"google.co.uk","url":"http:\/\/tr.im\/hfhb","visits":0,"status":{"result":"OK","code":"201","message":"tr.im URL Already Created [yacitus]."},"date_time":"2009-03-11T10:15:35-04:00"}
código Note es 201, y el mensaje es "URL tr.im ya creados [yacitus]. "
No debo estar haciendo la autenticación HTTP básica correctamente (en cualquier intento). ¿Puedes ver mi problema? Tal vez debería mirar y ver lo que se envía por el cable? Nunca he hecho eso antes. ¿Hay API de Python que pueda usar (quizás en pdb)? ¿O hay otra herramienta (preferiblemente para Mac OS X) que pueda usar?
el sitio debe devolver '" WWW-Authenticate "' y el código 401 antes de que urllib2 (o httplib2) envíe sus credenciales. [Ver mi respuesta a continuación] (http://stackoverflow.com/questions/635113/python-urllib2-basic-http-authentication-and-tr-im/9698319#9698319). –
Nota: Este servicio parece estar extinto. – Laurel