Gram w kółko, próbuję napisać kod, aby użyć interfejsów API tr.im , aby skrócić adres URL.Python urllib2, podstawowe uwierzytelnianie HTTP i tr.im
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 200 (myślę, że powinno być 202). adres URL jest prawidłowy, ale podstawowe uwierzytelnienie HTTP nie działa, ponieważ skrócony adres URL nie znajduje się 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 Próbowałem również:
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. (Response.code 200 i adres URL jest poprawny, ale nie rejestrowane na moim rachunku w http://tr.im/.)
Jeśli używam kwerendy parametry ciągu zamiast podstawowego uwierzytelniania HTTP tak:
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()
. ..wtedy nie tylko adres URL jest prawidłowy, ale jest zapisany na moim koncie tr.im. (Choć response.code wciąż 200.)
Tam musi być coś nie tak z moim kodem chociaż (a nie tr.im API), ponieważ
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... powroty:
{"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 pojawi się na mojej liście adresów URL pod numerem 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
... ponownie, 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 Note jest 201, a komunikat jest „tr.im URL już stworzone [yacitus]. "
Nie mogę poprawnie wykonywać podstawowego uwierzytelniania HTTP (w obu przypadkach). Czy możesz zauważyć mój problem? Może powinienem zobaczyć i zobaczyć, co jest wysyłane przez przewód? Nigdy wcześniej tego nie robiłem. Czy mogę używać API Pythona (być może w pdb)? Czy istnieje inne narzędzie (najlepiej na Mac OS X), którego mogę użyć?
Witryna musi zwrócić '' WWW-Authenticate "' i kod 401 zanim urllib2 (lub httplib2) wyśle twoje referencje. [Zobacz moją odpowiedź poniżej] (http://stackoverflow.com/questions/635113/python-urllib2-basic-http-authentication-and-tr-im/9698319#9698319). –
Uwaga: ta usługa wydaje się być nieistniejąca. – Laurel