在外部表格上提交Catcha

时间:2014-03-18 17:11:08

标签: php forms curl

我接受了一项挑战,现在已经被困了几天了。我正在开发一个项目,我需要在外部服务器上提交一个表单,该服务器还有一个验证码。

我能够解决验证码并获得正确的值...我使用带有POST表单的curl尝试使用我设法获得的验证码提交完整的表单。

但是,当我运行脚本时,我返回的消息是安全代码(验证码)不正确。我相信这可能是因为一旦使用curl发布,图像有不同的代码?

以下是我正在使用的代码:

# SAVE CAPTCHA
function grab_image($url,$saveto){
    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt($ch, CURLOPT_COOKIESESSION,true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');   
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
    $raw=curl_exec($ch);
    curl_close ($ch);
    if(file_exists($saveto)){
        unlink($saveto);
    }
    $fp = fopen($saveto,'x');
    fwrite($fp, $raw);
    fclose($fp);
}


function postform(){
grab_image('path to/site', 'captcha.jpg');
$image = 'captcha.jpg';
$client = new DeathByCaptcha_SocketClient("myusername", "mypassword");
if ($captcha = $client->decode($image, 10)) {
    $url = "path to url in form action";
    $data = array();
    $data['submit']='1';
    $data['name']='my name';
    $data['comments']='Success Posting This Form';
    $data['vercode']=$captcha['text'];
    $data['Send']='Send Email to Breeder';

    $post_str = '';

    foreach($data as $key=>$value){
        $post_str .= $key.'='.urlencode($value).'&';
    }

    $post_str = substr($post_str, 0, -1);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);
    curl_setopt($ch, CURLOPT_COOKIEFILE, TRUE); 
    $output = curl_exec($ch);
    curl_close($ch); 
    echo $output;
    }

再次......运行之后,我发现验证码不正确。其他一切似乎都运行良好,我能够解决验证码。我想我的主要困难在于能够确保提交的验证码与预期的相同。也许它更新了?我不确定。

非常感谢任何有关解决此挑战的帮助!!

0 个答案:

没有答案