2013-09-29 2 views
0

Twitter 스트림을 처리 할 스크립트를 생성하려고합니다. 불행히도 OAuth 프로세스가 저를 방해했습니다. 인터넷에서 찾은 일부 코드를 채택하면 https://api.twitter.com/oauth/token에서 빈 응답이 수신됩니다. 프로세스를 더 잘 이해하기 위해 특수 모듈없이이 작업을 수행하려고합니다. 여기 내 코드가 무엇입니까? 어떤 도움이라도 대단히 감사하겠습니다.http.client.BadStatusLine : 'python3으로 app-only twitter oauth를 시도 할 때'

코드 :

import http.client 
import urllib 
import base64 

CONSUMER_KEY = 'yadayadayada' 
CONSUMER_SECRET = 'I am really tired today' 

encoded_CONSUMER_KEY = urllib.parse.quote(CONSUMER_KEY) 
encoded_CONSUMER_SECRET = urllib.parse.quote(CONSUMER_SECRET) 
concat_consumer_url = encoded_CONSUMER_KEY + ':' + encoded_CONSUMER_SECRET 


host = 'api.twitter.com' 
url = '/oauth2/token/' 
params = urllib.parse.urlencode({'grant_type' : 'client_credentials'}) 
req = http.client.HTTPSConnection(host, timeout = 100) 
req.set_debuglevel(1) 
req.putrequest("POST", url) 
req.putheader("Host", host) 
req.putheader("User-Agent", "My Twitter 1.1") 
req.putheader("Authorization", "Basic %s" % base64.b64encode(b'concat_consumer_url')) 
req.putheader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8") 
req.putheader("Content-Length", "29") 
req.putheader("Accept-Encoding", "identity") 
req.endheaders() 

req.send(b'params') 

resp = req.getresponse() 


print ("{} {}".format(resp.status, resp.reason)) 

오류 메시지 : 어떤 도움을 크게 감상 할 수

C:\Python33>app_only_test_klug.py 
Traceback <most recent call last>: 
    File "C:\Python33\app_only_test_klug.py", line 31, in <module> 
     resp = req.getresponse() 
    File "C:\Python33\lib\http\client.py", line 1131, in getresponse 
     response.being() 
    File "C:\Python33\lib\http\client.py", line 354, in begin 
     version, status, reason = self._read_status() 
    File "C:\Python33\lib\http\client.py", line 324, in _read_status 
     raise BadStatusLine(line) 
http.client.BadStatusLine: '' 

.

UPDATE :

req.putheader ("인증", "기본 %의"%의 base64.b64encode (B ':

좀 더 땜질 후, 나는 문제가 내 base64 인코딩에 놓여 있다고 생각

위의 결과 인코딩을 디코딩 할 때 콜론 (:)을 결합한 encoded_CONSUMER_KEY와 encoded_CONSUMER_SECRET의 연결이 아니라 "b'concat_consumer_url ''을 얻습니다. concat_comsumer_url이 "concat_consumer_url"문자열이 아닌 value를 b64encode로하여 base64를 얻는 방법은 앞으로 나아갈 수 있습니까? 미리 감사드립니다.

답변

0

나는 문제가 아니라이 생각 - 당신은 그냥 아니라 바이트로 변수의 이름보다, 인코딩 함수에 변수를 전달해야, 다음과 같이 :

req.putheader("Authorization", "Basic %s" % base64.b64encode(concat_consumer_url)) 

그와 함께 다시 시도 변화.

+0

감사합니다. 그것은 포맷 작업을했지만 응답은 여전히 ​​비어 있습니다. – Steve

관련 문제