Tôi đang phát xung quanh, cố gắng viết một số mã để sử dụng các API tr.im để rút ngắn URL.Python urllib2, xác thực HTTP cơ bản và tr.im
Sau khi đọc http://docs.python.org/library/urllib2.html, tôi đã cố gắng:
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 là 200 (Tôi nghĩ rằng nó phải 202). url là hợp lệ, nhưng xác thực HTTP cơ bản dường như không hoạt động, vì URL rút gọn không có trong danh sách URL của tôi (tại http://tr.im/?page=1).
Sau khi đọc http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly Tôi cũng đã cố gắng:
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()
Nhưng tôi nhận được kết quả tương tự. (Response.code là 200 và url là hợp lệ, nhưng không được ghi lại trong tài khoản của tôi tại http://tr.im/.)
Nếu tôi sử dụng các thông số chuỗi truy vấn thay vì xác thực HTTP cơ bản, như thế này:
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()
. ..đây không chỉ là url hợp lệ mà nó được ghi lại trong tài khoản tr.im của tôi. (Mặc dù response.code vẫn 200. là)
Phải có một cái gì đó sai với mã của tôi mặc dù (và không tr.im của API), vì
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... lợi nhuận:
{"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"}
... và URL xuất hiện trong danh sách URL của tôi trên http://tr.im/?page=1.
Và nếu tôi chạy:
$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk
... một lần nữa, tôi nhận được:
{"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"}
Lưu ý code is 201, và thông điệp là "URL tr.im Đã tạo [yacitus]. "
Tôi không được thực hiện xác thực HTTP cơ bản một cách chính xác (trong cả hai lần thử). Bạn có thể phát hiện vấn đề của tôi không? Có lẽ tôi nên xem và xem những gì đang được gửi qua dây? Tôi chưa bao giờ làm điều đó trước đây. Có Python API tôi có thể sử dụng (có lẽ trong pdb)? Hoặc là có một công cụ (tốt cho Mac OS X) tôi có thể sử dụng?
trang web phải trả về "WWW-Authenticate" 'và mã 401 trước urllib2 (hoặc httplib2) sẽ gửi thông tin đăng nhập của bạn. [Xem câu trả lời của tôi bên dưới] (http://stackoverflow.com/questions/635113/python-urllib2-basic-http-authentication-and-tr-im/9698319#9698319). –
Lưu ý: Dịch vụ này có vẻ không còn tồn tại. – Laurel