Je joue en essayant d'écrire du code pour utiliser les API tr.im pour raccourcir une URL.
Après avoir lu http://docs.python.org/library/urllib2.html , j'ai essayé:
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 est 200 (je pense qu'il devrait être 202). url est valide, mais l'authentification HTTP de base ne semble pas avoir fonctionné, car l'URL raccourcie ne figure pas dans ma liste d'URL (sur http://tr.im/?page=1 ).
Après avoir lu http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly, j'ai également essayé:
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()
Mais j'obtiens les mêmes résultats. (response.code est 200 et l'URL est valide, mais pas enregistrée dans mon compte à http://tr.im/ .)
Si j'utilise des paramètres de chaîne de requête au lieu de l'authentification HTTP de base, comme ceci:
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()
... alors non seulement l'URL est valide mais elle est enregistrée dans mon compte tr.im. (Bien que response.code soit toujours 200.)
Il doit y avoir quelque chose qui ne va pas avec mon code (et pas l'API de tr.im), car
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...Retour:
{"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"}
... et l'URL apparaît dans ma liste d'URL sur http://tr.im/?page=1 .
Et si je cours:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... encore une fois, je reçois:
{"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"}
Le code de note est 201 et le message est "URL tr.im déjà créée [yacitus]".
Je ne dois pas faire correctement l'authentification HTTP de base (dans les deux tentatives). Pouvez-vous repérer mon problème? Peut-être que je devrais regarder et voir ce qui est envoyé sur le fil? Je n'ai jamais fait ça avant. Y a-t-il des API Python que je peux utiliser (peut-être dans pdb)? Ou y a-t-il un autre outil (de préférence pour Mac OS X) que je peux utiliser?
"WWW-Authenticate"
et le code 401 avant que urllib2 (ou httplib2) envoie vos identifiants. Voir ma réponse ci-dessous .