php 中的 Reddit API 返回错误的验证码以提交故事

Posted

技术标签:

【中文标题】php 中的 Reddit API 返回错误的验证码以提交故事【英文标题】:Reddit API in php returns bad captcha for submitting story 【发布时间】:2011-11-18 06:11:54 【问题描述】:

使用 php for Reddit api 提交故事返回错误的验证码作为错误。 我能够使用 api 登录并使用 api 完美地获取 usermod 和验证码。 理想情况下,如果 reddit_session cookie 被传递,它应该发布并且不返回错误的验证码,有人可以让我对此有所了解..

参考链接: https://github.com/reddit/reddit/wiki/API

<?php
$user = "";
$passwd = "";
$url = "http://www.reddit.com/api/login/".$user;

$r = new HttpRequest($url, HttpRequest::METH_POST);
$r->addPostFields(array('api_type' => 'json', 'user' => $user, 'passwd' => $passwd));

try 
    $send = $r->send();
    $userinfo = $send->getBody();
 catch (HttpException $ex) 
    echo $ex;


$arr = json_decode($userinfo,true);

$modhash = $arr['json']['data']['modhash'];
$reddit_session = $arr['json']['data']['cookie'];

$post = array('uh'=>$modhash,
               'kind'=>'link',
                'url'=>'yourlink.com',
                'sr'=>'funny',
                'title'=>'omog-asdfasf',
                'id'=>'newlink',
                'r'=>'funnyier',                
                'renderstyle'=> 'html'              
                );


$url = "http://www.reddit.com/api/submit";

// Upvote RoboHobo's comment :)
// Add user cookie data
$r->addCookies(array("reddit_session" => $reddit_session));
// Set URL to vote
$r->setUrl($url);
// Add vote information, found at http://wiki.github.com/talklittle/reddit-is-fun/api-all-functions
$r->setPostFields($post);
// Send request blindly


try 
    $userinfo = $r->send();
 catch (HttpException $ex) 
    echo $ex;   

pre($userinfo);
exit;

function pre($r)
echo "<pre />";
print_r($r);

?>

【问题讨论】:

我很想知道这个问题的答案,我自己也有同样的问题。 API 中 CAPTCHA 的意义何在? 【参考方案1】:

对于最近偶然发现这个问题并且仍然存在这个问题的其他人:

上述问题已修复并且可以正常工作,但是如果您为 reddit 机器人创建了一个新帐户并尝试提交故事,您将收到 bad_captcha 错误。新帐户必须提交验证码,直到他们获得一定数量的业力,所以这是您看到的错误。使用旧帐户尝试请求,这应该可以解决您的问题。

【讨论】:

非常感谢。我花了很长时间才找到这个修复程序。 你是说你不能得到验证码链接图片,所以我们可以将它嵌入到应用程序中,以便用户可以在应用程序内解决?【参考方案2】:

据我所知,目前验证码在 Reddit API 中被破坏。他们最初使用的是过时的 PyCAPTCHA 并且是 migrating to reCAPTCHA。从那时起,有一个issue 使用api_type:json,它有一个变通办法,github 上的某个人目前正在处理它。他还提供了一个解释/解决方案:

很简单,当需要 >captcha 时,json(尽管不是 jquery)结果应该包含 captcha_id。 captcha_id 我的意思是完成如下网址的部分:>http://www.reddit.com/captcha/(captcha_id).png

我遇到的用例是尝试使用 >api_type:json 通过 api 提交故事。我很高兴知道我不存在的验证码不正确,但是,我 > 然后必须向 http://www.reddit.com/api/new_captcha 提出请求才能获得 >captcha_id。最后一次往返似乎没有必要。

【讨论】:

以上是关于php 中的 Reddit API 返回错误的验证码以提交故事的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 POST 到 API 重定向 302 而不是返回验证错误

reddit api 分页:之前总是为空

从 Google App Engine 调用 Reddit api 时出现错误 429

为啥我在尝试使用 reddit API 时会收到 405 错误?

如何在返回所有错误的同时使用 PHP laravel 中的公共类有选择地验证多个字段

从 reddit api 获取 api oauth 访问令牌