OAuth
을 사용하기위한 Python 프로그램을 작성했습니다. 액세스 토큰 (예 : Twitter)을 사용하여 서비스 리소스에 액세스하는 동안 한 가지 문제를 관찰하고 있습니다.트위터 인증 헤더 사용시 인증 데이터가 잘못되었습니다.
access_token
을 성공적으로 검색 할 수 있지만 access_token
을 트위터에 Authorization
헤더로 사용하려고 시도하면 작동하지 않습니다. 그러나 이것을 일반 URL 매개 변수로 전달하면 원하는 결과를 얻을 수 있습니다. 방법 작품 아래
parameters_access_resource = [
('oauth_consumer_key', self.consumerKey),
('oauth_signature_method', 'HMAC-SHA1'),
('oauth_timestamp', self._timestamp),
('oauth_nonce', self._nonce),
('oauth_version', '1.0'),
('oauth_token', self._accessToken),
('oauth_signature', self._signature)
]
: 문제
urlLink = "https://api.twitter.com/1.1/account/settings.json"
url = "?".join((urlLink, urllib.urlencode(parameters_access_resource)))
reqobj = urllib2.Request(url,data=[])
resp = urllib2.urlopen(reqobj)
print resp.read()
: 트위터 문서 당으로
는 access_token
는 Authorization
헤더로 전달되어야한다, 그래서 나는
headers = {
"Accept": "*/*",
"Connection": "close",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Content-Type" : "application/x-www-form-urlencoded",
"Host" : "api.twitter.com",
"Authorization" : self._getAuthorizationHeader(parameters_access_resource)
}
def _getAuthorizationHeader(self,params):
params = dict(params)
sortedParams = {}
sortedParams = collections.OrderedDict(sorted(params.items()))
authHeader = (
'%s="%s"' % (k, v) for k, v in sortedParams.iteritems())
retval = "OAuth " + ', '.join(authHeader)
return retval
url = "https://api.twitter.com/1.1/account/settings.json"
reqobj = urllib2.Request(url,data=[],headers=headers)
resp = urllib2.urlopen(reqobj)
print resp.read()
다음 오류가보고되었습니다. requests
모듈을 사용하여 다른 조합을 시도했지만 문제를 파악할 수 없습니다.
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
누군가이 문제를 해결하는 방법을 안내해 줄 수 있습니까?
P.S : 이미이 작업에 사용할 수있는 많은 모듈이 있다는 것을 알고 있지만 학습 목적으로이 코드를 작성하고 있습니다.