2013-06-22 3 views
0

Reddit에 로그인하여 내 계정 데이터를 가져 오려고합니다.Reddit API에서 json을 요청할 때 404 오류가 발생했습니다.

이 내 파이썬 코드 :

from pprint import pprint 
import requests 
import json 
username = 'dirk_b' 
password = 'willnottell' 
user_pass_dict = {'user': username, 
     'passwd': password, 
     'api_type': 'json', 
     'rem': True, } 
headers = {'dirkie': '/u/dirk_b API python test', } 
client = requests.session() 
client.headers = headers 
r = client.post(r'http://www.reddit.com/api/login', data=user_pass_dict) 
j = json.loads(r.content.decode()); 
client.modhash = j['json']['data']['modhash'] 
s = client.post(r'http://www.reddit.com/api/me.json', data=user_pass_dict) 
pprint(s.content) 

내가 얻을 응답은 다음과 같습니다 B '{ "오류": 404}'

나는 .json 부분없이 동일한 요청을 할 경우. 나는 'reddit.com : page not found'라는 HTML 코드를 얻었습니다. 그래서 나는 URL에 뭔가 잘못하고 있다고 가정합니다. 하지만 내가 사용하는 URL은 Reddit API에서 지정되는 방식입니다.

내가 PRAW를 사용하지 않는 이유는 결국 C++에서이 작업을 수행 할 수 있기를 원하지만 Python에서 먼저 작동하는지 확인하고 싶었 기 때문입니다.

+0

왜'r.content.decode()':

그런 다음 POST 요청 데이터의 modhash를 사용할 수 있습니까? 'json' 라이브러리는 * 당신을위한 디코딩을 처리합니다. 'json.loads (r.content)'는 괜찮습니다. 또는'client.post()'에'stream = True'를 사용하고 http 소켓에서 직접 라이브러리를 읽게하려면'json.load (r.raw)'를 사용하십시오 (데이터 압축시 작동하지 않을 수도 있음). –

+0

또한 'client.modhash'는 무엇입니까? 그것은 서버로 전달되지 않습니다. –

+0

3.3에서는 .decode 없이는 작동하지 않습니다. - decode()는 UTF-8로 디코딩합니다. – user970922

답변

2

/api/me.json route는 GET 요청을 받아들

s = client.get('http://www.reddit.com/api/me.json') 

가 엔드 포인트에 대한 POST 경로가 없다, 그래서 당신은 그것을 위해 404를 얻을 수 있습니다.

또한 서버에 modhash을 전달해야하는 경우 POST 요청에서 전달 된 데이터에서 수행하십시오. client.modhash을 설정하면 이 아닌이되며 해당 매개 변수가 서버에 전달됩니다. 당신은 당신의 me.json GET 응답에서에게 modhash를 검색 : requests로부터의 응답이 .json() 방법을 얼마나

r = client.get('http://www.reddit.com/api/me.json') 
modhash = r.json()['modhash'] 

참고, 자신을 모듈 json를 사용할 필요가 없습니다.

client.post('http://www.reddit.com/api/updateapp', {'modhash': modhash, 'about_url': '...', ...}) 
관련 문제