2013-04-04 53 views
3

我試圖通過POST請求連接到twiiter API作爲docs say,但我總是得到403禁止的錯誤。Twitter REST API 1.1的問題 - 僅適用於應用程序驗證的響應403 Python錯誤

這是我的代碼。我使用urlib2在Python 2.7:

def auth_API(): 
    url = 'https://api.twitter.com/oauth2/token' 
    header = {} 
    values = {} 
    header['User-Agent'] = 'Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1' 
    header['Authorization'] = 'Basic ' + B64BEARERTOKENCREDS 
    header['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' 
    header['Accept-Encoding'] = 'gzip' 
    values['grant_type'] = 'client_credentials' 

    data = urllib.urlencode(values) 
    req = urllib2.Request(url, data, header) 
    try: 
     response = urllib2.urlopen(req) 
     response.read() 
    except urllib2.HTTPError as e: 
     print e 

檢查我發現了一個例子請求至極的文檔是我的一樣:

Twitter的例子:

POST /oauth2/token HTTP/1.1 
Host: api.twitter.com 
User-Agent: My Twitter App v1.0.23 
Authorization: Basic NnB1[...]9JM29jYTNFOA== 
Content-Type: application/x-www-form-urlencoded;charset=UTF-8 
Content-Length: 29 
Accept-Encoding: gzip 

grant_type=client_credentials 

我的要求:

POST /oauth2/token HTTP/1.1 
Content-Length: 29 
Accept-Encoding: gzip 
Connection: close 
User-Agent: Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1 
Host: api.twitter.com 
Content-Type: application/x-www-form-urlencoded;charset=UTF-8 
Authorization: Basic NnB1[...]YTNFOA== 

grant_type=client_credentials 

任何想法與這可能是錯誤的?

問候。 PS:我知道這裏有一些第三方庫,但我想自己做。

回答

2

我解決了我的問題,錯誤是在base64.encodestring()中添加了一個\ n在字符串的末尾搞亂了請求。

使用base64.b64encode()可以正常工作。

Regards

相關問題