2011-08-16 3 views
0

인사말!python-oauth2 및 Imgur의 인증 된 API를 사용하여 Python 2.7에서 응답 압축 풀기 오류

나는 파일을 업로드해야하는 서비스를 결정하기 위해 파일 확장자를 필터링하는 다중 서비스 파일 업 로더에서 작업 해왔다. 내 주요 목표는 Imgur 사용자 계정으로 업로드하는 것입니다. API는 다른 서비스 (예 : OAuth2 인증)와 달리 가장 복잡하기 때문에 업로드하는 것이 좋습니다. 이전에 SSL을 통한 연결에 문제가있었습니다. HTTPLib 인증서 저장소가 SSL 핸드 셰이크를 확인하지 않았지만 Imgur의 인증서 공급자의 CA를 인증서 목록에 수동으로 추가하여 해결했습니다.

어쨌든 쿠키를 사용하여 Imgur에 "로그인"할 수 있었지만 oauth를 사용하는 편이 낫습니다. 쿠키 방법은 여전히 ​​업로드 제한이 낮은 익명 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 

핀이 인수 한 후 호출 내 인증 기능이, 이것이다 : 다음 Imgur API 인증 자원이 주어진

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가 응답으로 반환하는 것과 관련해서는 확실하지 않습니다. 제목에서 언급 한 것처럼 Python 2.7 및 python-oauth2을 사용하고 있습니다.

나는 모든 의견을 매우 기뻐할 것입니다. 시간 내 주셔서 감사합니다.

각도기 닌자

답변

0

나는 파이썬에 대한 요청-의 OAuth를 사용하고, 나는 내가 가지고 있던 문제는, 내 파서가 긴 하나 개의 항목 목록으로 토큰을 반환 하였다 생각합니다. 그래서 내가 한 것은 tokenList[0]을 얻었고,이 문제가 해결되었습니다.

1 년 후에 도움이 되었기를 바랍니다.