मैं चारों ओर खेल रहा हूं, एक URL को छोटा करने के लिए tr.im APIs का उपयोग करने के लिए कुछ कोड लिखने की कोशिश कर रहा हूं ।
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 खाते में दर्ज है। (हालांकि प्रतिक्रिया.कोड अभी भी 200 है।)
मेरे कोड के साथ कुछ गलत होना चाहिए (और 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 प्रमाणीकरण सही तरीके से (या तो प्रयास में) नहीं करना चाहिए। क्या आप मेरी समस्या का समाधान कर सकते हैं? शायद मुझे देखना चाहिए और देखना चाहिए कि तार पर क्या भेजा जा रहा है? मैंने पहले कभी ऐसा नहीं किया। क्या पायथन एपीआई मैं उपयोग कर सकते हैं (शायद पीडीबी में)? या वहाँ एक और उपकरण है (अधिमानतः मैक ओएस एक्स के लिए) मैं उपयोग कर सकता हूं?
"WWW-Authenticate"
और urllib2 (या canplib2) से पहले 401 को कोड करना होगा जो आपकी साख भेजेगा। नीचे मेरा जवाब देखें ।