Bawię się, próbując napisać kod, aby użyć interfejsów API tr.im do skrócenia adresu URL.
Po przeczytaniu http://docs.python.org/library/urllib2.html próbowałem:
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 to 200 (myślę, że powinno być 202). adres url jest prawidłowy, ale wydaje się, że podstawowe uwierzytelnianie HTTP nie zadziałało, ponieważ skróconego adresu URL nie ma na mojej liście adresów URL (pod adresem http://tr.im/?page=1 ).
Po przeczytaniu http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly spróbowałem też:
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()
Ale mam takie same wyniki. (kod odpowiedzi to 200, a adres URL jest prawidłowy, ale nie został zapisany na moim koncie pod adresem http://tr.im/ .)
Jeśli używam parametrów ciągu zapytania zamiast podstawowego uwierzytelniania HTTP, na przykład:
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()
... to nie tylko adres URL jest prawidłowy, ale jest zapisywany na moim koncie tr.im. (Chociaż kod odpowiedzi to nadal 200.)
Jednak musi być coś nie tak z moim kodem (a nie z API tr.im), ponieważ
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...zwroty:
{"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"}
... a adres URL pojawia się na mojej liście adresów URL pod adresem http://tr.im/?page=1 .
A jeśli biegnę:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... znowu otrzymuję:
{"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"}
Kod notatki to 201, a wiadomość to „Tr.im URL Already Created [yacitus]”.
Nie mogę poprawnie wykonywać podstawowego uwierzytelniania HTTP (w żadnej z prób). Czy widzisz mój problem? Może powinienem spojrzeć i zobaczyć, co jest przesyłane przez drut? Nigdy wcześniej tego nie robiłem. Czy istnieją interfejsy API Pythona, których mogę używać (być może w pdb)? A może jest inne narzędzie (najlepiej dla Mac OS X), którego mogę użyć?
"WWW-Authenticate"
i kod 401, zanim urllib2 (lub httplib2) wyśle Twoje poświadczenia. Zobacz moją odpowiedź poniżej .