ฉันกำลังเล่นอยู่พยายามเขียนโค้ดเพื่อใช้ไฟล์ tr.im API เพื่อย่อ 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()
response.code คือ 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()
แต่ฉันได้รับผลลัพธ์เดียวกัน (response.code คือ 200 และ url ถูกต้อง แต่ไม่ได้บันทึกไว้ในบัญชีของฉันที่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 ของฉัน (แม้ว่า response.code จะยังคงเป็น 200)
ต้องมีบางอย่างผิดปกติกับรหัสของฉันแม้ว่า (ไม่ใช่ API ของ tr.im) เพราะ
$ 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 ไม่ปรากฏในรายการของ URL ในhttp://tr.im/?page=1
และถ้าฉันวิ่ง:
$ 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) ที่ฉันสามารถใช้ได้?
"WWW-Authenticate"
และรหัส 401 ก่อนที่ urllib2 (หรือ httplib2) จะส่งข้อมูลรับรองของคุณ ดูคำตอบของฉันด้านล่าง