2011-09-15 46 views
5

使用php for Reddit api提交故事會返回錯誤的驗證碼錯誤。 我能夠使用api登錄並使用api完美地獲取usermod和驗證碼。 理想的情況下,如果reddit_session的cookie獲得通過,也應該張貼,而不是返回錯誤的captcha有人可以擺脫我一些光在這..Reddit中的Reddit API返回錯誤的驗證碼以提交故事

參考鏈接: 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); 
} 
?> 
+0

我很想知道這個答案,自己也有同樣的問題。在API中,CAPTCHA有什麼意義? – Kane

回答

3

從我所知道的,在CAPTCHA在Reddit API中被破解。他們最初使用的是過時的PyCAPTCHA,並且是migrating to reCAPTCHA。從那以後,出現了一個issue,使用api_type:json,它有一個解決方法,github上的某個人正在使用它。他還提供了一個解釋/解決方案:

很簡單,當需要> captcha時,json(儘管不是jquery)結果應該包含captcha_id。通過captcha_id我的意思是部分完成url像followng:> http://www.reddit.com/captcha/(captcha_id).png

我遇到的用例是當試圖通過提交一個故事api使用> api_type:json。我很好地通知我的不存在的驗證碼不正確,但是,我必須向http://www.reddit.com/api/new_captcha發送請求,以獲取> captcha_id。這最後一次往返似乎沒有必要。

5

對於其他任何人無意中發現了這個問題,最近,並且仍然有這個問題:

上述問題是固定的,如果你創建了一個新帳戶,您的reddit的機器人,並嘗試提交然而,工作正常故事你會收到一個bad_captcha錯誤。新帳戶必須提交驗證碼,直到他們獲得一定數量的業力,因此這是您所看到的錯誤。用舊帳戶嘗試請求,這應該可以解決您的問題。

+0

非常感謝。永遠讓我找到這個修復。 – DLeh

+0

你是說你無法獲取驗證碼鏈接圖像,所以我們可以將它嵌入到應用程序,以便用戶可以解決內部應用程序? – cikatomo