3

正如文档所说,我正在尝试通过 POST 请求连接到 twiiter API,但我总是收到 403 禁止错误。

这是我的代码。我在 python 2.7 中使用 urlib2:

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

检查文档我发现一个示例请求与我的相同:

推特示例:

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:我知道这有一些第三方库,但我想自己制作。

4

1 回答 1

2

我解决了我的问题,错误是 base64.encodestring() 在字符串的末尾添加了一个 \n 弄乱了请求。

使用 base64.b64encode() 代替工作正常。

问候

于 2013-04-24T15:53:50.893 回答