我正在尝试编写一些代码,使用 tr.im APIs 来缩短URL。
在阅读了http://docs.python.org/library/urllib2.html之后,我尝试了以下代码:
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()
响应代码是 200(我认为应该是 202)。URL 是有效的,但基本的 HTTP 身份验证似乎没有起作用,因为缩短的 URL 不在我的 URL 列表中(位于 http://tr.im/?page=1)。
阅读完http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly后,我还尝试了:
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()
但我得到的结果是一样的。(响应代码为200,网址有效, 但未记录在http://tr.im/我的账户中。)
如果我使用查询字符串参数而不是基本的HTTP身份验证,像这样:
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()
如果url是有效的并且已记录在我的tr.im账户中,那么响应代码仍然为200。
不过,由于我的代码有问题(而不是tr.im的API有问题),因此出现了这种情况。
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...返回:
{"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"}
...而且这个URL确实出现在我在http://tr.im/?page=1上的URL列表中。
如果我运行:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
...再次运行,我得到以下结果:
{"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"}
注意,代码是201,消息是“tr.im URL已经被创建[yacitus]”。
我可能没有正确执行基本的HTTP身份验证(在任何一次尝试中)。你能发现我的问题吗?也许我应该查看一下发送到网络的内容?我以前从未这样做过。是否有可以使用的Python API(也许在pdb中)?或者是否有其他工具(最好是适用于Mac OS X)可供使用?