WebHU - Programozási kérdések és válaszok

Az OAuth Twitter-szkripttel a Pythonban nem működik

Az OAuth szkriptjét írom Pythonban.

Ennek tesztelésére a Twitter API-t használom. De nem működik jól.

def test():
    params = {
            "oauth_consumer_key": TWITTER_OAUTH_CONSUMER_KEY,
            "oauth_nonce": "".join(random.choice(string.digits + string.letters) for i in xrange(7)),
            "oauth_signature_method": "HMAC-SHA1",
            "oauth_timestamp": str(int(time.time())),
            "oauth_token": res_dict["oauth_token"],
            "oauth_version": "1.0",
            }
    status = {"status": u"Always_look_on_the_bright_side_of_life".encode("UTF-8")}
    print status
    params.update(status)
    url = "http://twitter.com/statuses/update.xml"
    key = "&".join([TWITTER_OAUTH_CONSUMER_SECRET, res_dict["oauth_token_secret"]])
    msg = "&".join(["POST", urllib.quote(url,""),
                    urllib.quote("&".join([k+"="+params[k] for k in sorted(params)]), "-._~")])
    print msg
    signature = hmac.new(key, msg, hashlib.sha1).digest().encode("base64").strip()
    params["oauth_signature"] = signature
    req = urllib2.Request(url,
          headers={"Authorization":"OAuth", "Content-type":"application/x-www-form-urlencoded"})
    req.add_data("&".join([k+"="+urllib.quote(params[k], "-._~") for k in params]))
    print req.get_data()
    res = urllib2.urlopen(req).read()
    print res

Ez a szkript (status="Always_look_on_the_bright_side_of_life") működik.

De abban az esetben, ha az állapot "Mindig nézze az élet jó oldalát" (az aláhúzás szóközzel van helyettesítve), akkor nem működik (401-es HTTP-hibát ad vissza: Nem engedélyezett).

Hivatkoztam erre a kérdésre, de nem sikerült.

Kérem adjon tanácsot. Köszönöm.

11.02.2010

  • +1 a megfelelő mintakarakterláncok használatához egy Python-példában. 11.02.2010

Válaszok:


1

Ugyanez volt a probléma az OAuth-ban és a FaceBook-nál egy ideje. A probléma az, hogy az aláírás ellenőrzése a szerver oldalon meghiúsul. Tekintse meg aláírásgeneráló kódját itt:

msg = "&".join(["POST", urllib.quote(url,""),
                urllib.quote("&".join([k+"="+params[k] for k in sorted(params)]), "-._~")])
print msg
signature = hmac.new(key, msg, hashlib.sha1).digest().encode("base64").strip()

A karakterlánc nyers (nem kódolt) formáját használja az aláírás létrehozásához. A szerveroldal azonban ellenőrzi az aláírást az URL idézett karakterláncával szemben:

req.add_data("&".join([k+"="+urllib.quote(params[k], "-._~") for k in params]))

A kód javításához ki kell javítania ezt a sort úgy, hogy létrehozza az aláírást az url kódolású paraméterből:

msg = "&".join(["POST", urllib.quote(url,""),
                urllib.quote("&".join([k+"="+urllib.quote(params[k], "-._~") for k in sorted(params)]), "-._~")])
15.02.2010

2

Ezt a legegyszerűbben úgy javíthatja ki, ha hozzáadja a status = urllib.quote(status) értéket a status = {"status": u"Always_look_on_the_bright_side_of_life".encode("UTF-8")} után. Ez szükség szerint elkerüli a szóközöket és más speciális karaktereket.

12.02.2010
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..