在编写PHP自动处理脚本时可能会遇到需要输入验证码的情况,比如我在写淘宝店铺助手时就要求登录时必须输入验证码。解决办法是增加一个专用登录页面,在登录时如果遇到需要输入验证码的情况就通过curl使用同一个cookie在同一session下从目标服务器取到验证码保存成本地图片,然后在专用登录界面显示该验证码图片让用户输入对应的验证码,再提交完成登录,登录结果自动保存在cookie里,之后使用同一cookie在同一session里使用就不再需要登录。
为了方便管理,每次登录时都保存成images/checkcode.jpg,在专用登录界面如果使用常规方法<img src=”images/checkcode.jpg”>显示验证码图片,浏览器会优先从缓存读取图片来显示,这样用户看到的是旧的验证码图片,解决办法是在jpg文件后加随时间变化的参数,比如“日时分秒”数值:
[php]
$content = getContent($checkcode_url);
file_put_contents(‘images/checkcode.jpg’, $content);
echo ‘<form action=”login.php” method=”post”><img src=”images/checkcode.jpg?’ . date(‘dHis’) . ‘” width=”100″ height=”30″ border=”1″> <input name=”checkcode” type=”text” size=”8″> <input type=”submit” name=”Submit” value=”提交”></form>’;
[/php]
配置使用cookie的脚本:
define(‘COOKIE_FILE’, ‘tbcookie’);
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath(COOKIE_FILE));
curl_setopt($ch, CURLOPT_COOKIEFILE, realpath(COOKIE_FILE));