拜!
我一直在研究一个多服务文件上传器,它过滤文件扩展名以决定应该将文件上传到哪个服务。我的主要目标是上传到Imgur用户帐户,因为与其他服务(即使用OAuth2进行身份验证)相比,其API最复杂。我以前遇到过通过SSL连接的问题,因为我的HTTPLib证书存储不会验证SSL握手,但我通过手动将Imgur的证书提供商的CA添加到证书列表来解决这个问题。
无论如何,我已经能够使用cookie“登录”到Imgur,但我更倾向于使用oauth - cookie方法仍然使用匿名API,它具有较低的上传限制。我正在尝试通过生成Oauth身份验证URL,并使用wxPython创建一个简单的文本输入对话框,询问用户提供其凭据时由该URL提供的PIN。问题是调用python-oauth2的身份验证器导致gzip解包错误,我不知道如何打击。这是错误:
Traceback (most recent call last):
File "C:\Users\Austin\Programming\python\uploaderator\mk2\main.py", line 10, in <module>
uploader = crumpet.Crumpet()
File "C:\Users\Austin\Programming\python\uploaderator\mk2\crumpet.py", line 30, in __init__
s.connect()
File "C:\Users\Austin\Programming\python\uploaderator\mk2\imgurHandler.py", line 40, in connect
self.authorize(pin)
File "C:\Users\Austin\Programming\python\uploaderator\mk2\oauthHandler.py", line 28, in authorize
resp, content = client.request(self.access_token_url, "POST")
File "build\bdist.win32\egg\oauth2\__init__.py", line 682, in request
File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 1436, in request
(response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 1188, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 1174, in _conn_request
content = _decompressContent(response, content)
File "C:\Python27\lib\site-packages\httplib2-0.7.1-py2.7.egg\httplib2\__init__.py", line 384, in _decompressContent
content = gzip.GzipFile(fileobj=StringIO.StringIO(new_content)).read()
File "C:\Python27\lib\gzip.py", line 245, in read
self._read(readsize)
File "C:\Python27\lib\gzip.py", line 316, in _read
self._read_eof()
File "C:\Python27\lib\gzip.py", line 334, in _read_eof
crc32 = read32(self.fileobj)
File "C:\Python27\lib\gzip.py", line 25, in read32
return struct.unpack("<I", input.read(4))[0]
struct.error: unpack requires a string argument of length 4
我的授权功能,在获取引脚后调用,是:
def authorize(self, pin):
self.token_u.set_verifier(pin)
client = oauth.Client(self.consumer, self.token_u)
resp, content = client.request(self.access_token_url, "POST")
access_token = dict(urlparse.parse_qsl(content))
self.oauth_token = access_token['oauth_token']
self.oauth_token_secret = access_token['oauth_token_secret']
self.token = oauth.Token(self.oauth_token, self.oauth_token_secret)
self.client = oauth.Client(self.consumer, self.token)
if resp['status'] == '200':
return True
else:
return False
self.access_token_url为https://api.imgur.com/oauth/access_token,由Imgur API身份验证资源提供。
我不确定这是否是我的代码的问题,或者Imgur返回的响应,因为有其他基于python的上传器似乎工作正常,使用非常类似的方法。就像我在标题中提到的那样,我使用的是Python 2.7和python-oauth2。
我非常感谢任何意见。谢谢你的时间。
量角器忍者
答案 0 :(得分:0)
我正在使用request-oauth for python,我认为我遇到的问题是,我的解析器将令牌作为一个项目的列表返回。所以我所做的只是获得tokenList[0]
,这解决了我的问题。
希望它有所帮助,一年之后。