我接受了一项挑战,现在已经被困了几天了。我正在开发一个项目,我需要在外部服务器上提交一个表单,该服务器还有一个验证码。
我能够解决验证码并获得正确的值...我使用带有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;
}
再次......运行之后,我发现验证码不正确。其他一切似乎都运行良好,我能够解决验证码。我想我的主要困难在于能够确保提交的验证码与预期的相同。也许它更新了?我不确定。
非常感谢任何有关解决此挑战的帮助!!