Ich spiele herum und versuche, Code zu schreiben, um die tr.im APIs zu verwenden, um eine URL zu verkürzen.Python urllib2, grundlegende HTTP-Authentifizierung und tr.im
Nach http://docs.python.org/library/urllib2.html lesen, habe ich versucht:
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 200 ist (ich glaube, es 202 sein sollte). URL ist gültig, aber die grundlegende HTTP-Authentifizierung scheint nicht funktioniert haben, weil die gekürzte URL ist nicht in meiner Liste der URLs (um http://tr.im/?page=1).
Nach http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly Lesen ich auch versucht:
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()
Aber ich die gleichen Ergebnisse erhalten. (Response.code 200 und URL gültig ist, aber nicht auf http://tr.im/ in meinem Konto aufgezeichnet.)
Wenn ich Abfrage-String-Parameter verwenden, anstatt grundlegende HTTP-Authentifizierung, wie folgt aus:
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()
. ..dann ist die URL nicht nur gültig, sondern auch in meinem tr.im Account. (Obwohl response.code ist noch 200.)
Es etwas falsch sein muss, wenn auch mit meinem Code (und nicht tr.im API), weil
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... Rückkehr:
{"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"}
... und die URL erscheint in meiner Liste der URLs auf http://tr.im/?page=1.
Und wenn ich laufen:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... wieder, die ich erhalten:
{"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"}
Hinweis Code ist 201, und die Nachricht ist „tr.im URL bereits erstellt [yacitus]. "
Ich muss nicht die grundlegende HTTP-Authentifizierung korrekt (in beiden Versuchen) tun. Kannst du mein Problem erkennen? Vielleicht sollte ich schauen und sehen, was über die Leitung geschickt wird? Das habe ich noch nie gemacht. Gibt es Python-APIs, die ich verwenden kann (vielleicht in pdb)? Oder gibt es ein anderes Tool (vorzugsweise für Mac OS X), das ich verwenden kann?
Die Website muss "WWW-Authenticate" und Code 401 zurückgeben, bevor urllib2 (oder httplib2) Ihre Anmeldeinformationen sendet. [Siehe meine Antwort unten] (http://stackoverflow.com/questions/635113/python-urllib2-basic-http-authentication-and-tr-im/9698319#9698319). –
Hinweis: Dieser Dienst scheint nicht zu funktionieren. – Laurel