2013-02-21 250 views
3

我试图通过使用其API页面上列出的Reddit API - POST login Endpoint访问我的Reddit用户的帐户。如何使用Reddit的API登录?

我尝试这样做:

curl -i -X POST -d '{"user":"myusername", "passwd":"mypassword", "rem":"true" }' http://www.reddit.com/api/login 

但它说密码错误(我登录到具有相同凭据的网站,所以我不知道什么是错的):

HTTP/1.1 200 OK 
Content-Type: application/json; charset=UTF-8 
{ 
    "jquery": 
      [[0, 1, "call", ["body"]], [1, 2, "attr", "find"], 
       [2, 3, "call", [".status"]], [3, 4, "attr", "hide"], 
       [4, 5, "call", []], [5, 6, "attr", "html"], 
       [6, 7, "call", [""]], [7, 8, "attr", "end"], 
       [8, 9, "call", []], [0, 10, "attr", "find"], 
       [10, 11, "call", [".error.WRONG_PASSWORD.field-passwd"]], 
       [11, 12, "attr", "show"], [12, 13, "call", []], 
       [13, 14, "attr", "text"], [14, 15, "call", ["invalid password"]], 
       [15, 16, "attr", "end"], [16, 17, "call", []]] 
} 

然而,这工作原理:

curl -i -c Cookie.txt -d '{"user":"myusername", "passwd":"mypassword" , "rem":"true"}' http://www.reddit.com/api/login 

产量:

{ 
    "jquery": 
       [[0, 1, "call", ["body"]], 
       [1, 2, "attr", "find"], 
       [2, 3, "call", [".status"]], 
       [3, 4, "attr", "hide"], 
       [4, 5, "call", []], 
       [5, 6, "attr", "html"], 
       [6, 7, "call", [""]], 
       [7, 8, "attr", "end"], 
       [8, 9, "call", []], 
       [0, 10, "attr", "find"], 
       [10, 11, "call", [".error.RATELIMIT.field-vdelay"]], 
       [11, 12, "attr", "show"], 
       [12, 13, "call", []], 
       [13, 14, "attr", "text"], 
       [14, 15, "call", 
       ["you are doing that too much. try again in 4 minutes."]], 
       [15, 16, "attr", "end"], [16, 17, "call", []]] 
} 

这也适用,以及:

curl -b Cookie.txt http://www.reddit.com/api/me.json 

问题:

  • 有谁知道如何使用API​​书签交易登录到reddit的?

  • 有没有更简单的方法通过HTTP Post传递凭据来正确登录?

  • 为什么从我的初始卷曲中说无效的密码?

回答

13

以下是如何使用curl登录到reddit适当的例子:

curl -duser=USERNAME -dpasswd=PASSWORD -dapi_type=json https://ssl.reddit.com/api/login 

通过传递api_type=json你得到有意义的JSON输出,而不是具体的reddit的,基于jQuery输出。

{"json": {"errors": [], 
      "data": {"modhash": "<REMOVED>", 
        "cookie": "<REMOVED>"} 
     } 
} 

请注意,reddit也正确使用set-cookie头,以便正确的http客户端/库将利用该会话的后续请求。

您的示例没有工作,因为您没有正确发送表单参数。你认为可能有效的例子,事实上并没有。您因未能多次登录而收到费率限制响应。

+0

谢谢bboe!这个curl命令更好,因为它返回了modhash。 – 2013-03-06 08:21:56