Juce
Juce

Reputation: 21

Twitter Oauth request token response 401, I cannot resolve

I try to use Twitter Oauth to login my Application(Web)

import requests
import random
import time
import hashlib
import hmac
import urllib
import base64

CONSUMER_KEY = "TestKey"
CONSUMER_SECRET = "TestSecret"
REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token"
CALLBACK_URL = "https://www.example.com/cgi-bin/twittercallback"

def urlencode(s):
    return urllib.parse.quote(s, safe='')

def request_token(url, method):
    params = dict()
    params['oauth_callback'] = CALLBACK_URL
    params['oauth_consumer_key'] = CONSUMER_KEY
    params['oauth_nonce'] = str(random.getrandbits(64))
    params['oauth_signature_method'] = 'HMAC-SHA1'
    params['oauth_timestamp'] = str(int(time.time()))
    params['oauth_version'] = '1.0'

    keys = sorted(list(params.keys()))
    enc_params = urlencode('&'.join(['%s=%s' % (urlencode(key), urlencode(params[key])) for key in keys]))
    base_string = '%s&%s&%s' % (method.upper(), urlencode(url), enc_params)
    key = CONSUMER_SECRET + '&'
    params['oauth_signature'] = base64.standard_b64encode(
        hmac.new(key.encode(), base_string.encode(), hashlib.sha1).digest()).decode('ascii')
    keys = sorted(list(params.keys()))
    authorize = 'OAuth ' + ', '.join('%s="%s"' % (key, urlencode(params[key])) for key in keys)

    ret = requests.post(url, headers={'Authorization': authorize})
    print(ret, ret.text)

if __name__ == '__main__':
    request_token(REQUEST_TOKEN_URL, 'POST')

I tried many times but also failed, the error info is

{"errors":[{"code":32,"message":"Could not authenticate you."}]}

what is wrong about my code?

Upvotes: 1

Views: 52

Answers (1)

Juce
Juce

Reputation: 21

I regenrate consumer API keys, my application can work normally

Upvotes: 1

Related Questions