SORU
11 Mart 2009, ÇARŞAMBA


Urllib2, HTTP kimlik doğrulaması, tr temel Python.im

Oyun oynamayı, http://tr.imkullanmak için bazı kod yazmaya çalışıyorum. Bir URL kısaltmak için API (http://tr.im/api/).

http://docs.python.org/library/urllib2.html, okuduktan sonra denedim:

   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()

yanıt.kodu 200 (202 olması gerektiğini düşünüyorum). url geçerli ama. temel HTTP kimlik doğrulaması çalışmış, çünkü görünmüyor kısaltılmış URL, URL listemde (http://tr.im/?page=1) değil.

Sonra okuma http://www.voidspace.org.uk/python/articles/authentication.shtml#doing-it-properly Ben de denedim:

   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()

Ama aynı sonuçları alıyorum. (yanıt.kod 200 ve url geçerli değil. ama http://tr.im/. benim hesap kayıtlı değil)

Eğer temel HTTP kimlik doğrulaması yerine sorgu dizesi parametreleri kullanırsam bu gibi:

   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()

...sonra sadece url geçerli değil ama benim tr kaydedildi.ım hesabı. (Gerçi cevabı.kod hala 200'dür.)

(Tr değil.ama bir şey benim koduyla yanlış olmalı im API), çünkü

$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk

...verir:

{"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"}

...ve URL http://tr.im/?page=1 URL listemde görünmüyor.

Ve eğer kaçarsam:

$ curl -u yacitus:xxxx http://api.tr.im/api/trim_url.json?url=http://www.google.co.uk

bir daha alıyorum:

{"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"}

Not kod 201 ve "tr.mesajdır ben Zaten [yacitus] URL Yarattı."

Doğru temel HTTP kimlik doğrulaması (ya da girişimi) yapıyor olmalıyım. Benim sorunum nokta olabilir? Belki de bakmak ve kablo gönderilmekte olan ne yapmalıyım? Daha önce hiç böyle bir şey yapmadım. Kullanabileceğim API (belki pdb) Python var mı? Ya da kullanabileceğim başka bir aracı (tercihen Mac OS X için).

CEVAP
15 Kasım 2010, PAZARTESİ


Bu gerçekten iyi çalışıyor (başka bir iş parçacığı alınan) gibi görünüyor

import urllib2, base64

request = urllib2.Request("http://api.foursquare.com/v1/user")
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)   
result = urllib2.urlopen(request)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bunnyboxx

    bunnyboxx

    17 NİSAN 2008
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • TechXCentral

    TechXCentral

    12 Temmuz 2011