验证码,目前是找到url,在前端网页上直接显示,然后手动输入。
在网页上用ajax提交登陆信息可以正确返回。
我将同样的组合好的信息,传入后台php文件中,用curl提交,但每次都报验证码错误。
感觉起来好像是在php中提交又刷新了一次验证码,请问这个需要怎么解决?
借用了ty0716的代码试了一下,还是有一些问题,不明白要怎么处理。
直接取验证码地址,没有cookie保存。用登陆页面的地址,没办法取验证码来识别。
define('SCRIPT_ROOT',dirname(__FILE__).'/');
include "code.php";
function send($loginUrl, $cookieFile){
// $name = $_POST['name'];
// $idcard = $_POST['idcard'];
// $pw = $_POST['pw'];
// $code = $_POST['code'];
$code = getCode('http://www.xxx.com/Num.jsp');
header("Content-Type: text/html;charset=utf-8");
$post_data = "".$code;
return post($loginUrl, $post_data, $cookieFile);
}
function getCode($captchaUrl, $cookieFile){
$captchaString = get($captchaUrl, $cookieFile);
$tempCaptchaFile = SCRIPT_ROOT. date('YmdHis') . '.jpg';
file_put_contents($tempCaptchaFile, $captchaString);
$ocr = new code($tempCaptchaFile);
$captcha = $ocr->getCode();
echo $captcha;
return $captcha;
}
function get($url, $cookie_file, $isCookiesSave = false)
{
// 初始化
$curl = curl_init($url);
$header = array();
$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// 不输出header头信息
curl_setopt($curl, CURLOPT_HEADER, 0);
if ($isCookiesSave) {
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);
} else {
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
}
// 保存到字符串而不是输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 是否抓取跳转后的页面
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$info = curl_exec($curl);
curl_close($curl);
return $info;
}
function post($url, $data, $cookie_file)
{
// 初始化
$curl = curl_init($url);
$header = array();
$header[0] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// 不输出header头信息
curl_setopt($curl, CURLOPT_HEADER, 0);
// 保存到字符串而不是输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
// post数据
curl_setopt($curl, CURLOPT_POST, 1);
// 请求数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
// 是否抓取跳转后的页面
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
验证码,目前是找到url,在前端网页上直接显示,然后手动输入。
在网页上用ajax提交登陆信息可以正确返回。
我将同样的组合好的信息,传入后台php文件中,用curl提交,但每次都报验证码错误。
感觉起来好像是在php中提交又刷新了一次验证码,请问这个需要怎么解决?
借用了ty0716的代码试了一下,还是有一些问题,不明白要怎么处理。
直接取验证码地址,没有cookie保存。用登陆页面的地址,没办法取验证码来识别。
define('SCRIPT_ROOT',dirname(__FILE__).'/');
include "code.php";
function send($loginUrl, $cookieFile){
// $name = $_POST['name'];
// $idcard = $_POST['idcard'];
// $pw = $_POST['pw'];
// $code = $_POST['code'];
$code = getCode('http://www.xxx.com/Num.jsp');
header("Content-Type: text/html;charset=utf-8");
$post_data = "".$code;
return post($loginUrl, $post_data, $cookieFile);
}
function getCode($captchaUrl, $cookieFile){
$captchaString = get($captchaUrl, $cookieFile);
$tempCaptchaFile = SCRIPT_ROOT. date('YmdHis') . '.jpg';
file_put_contents($tempCaptchaFile, $captchaString);
$ocr = new code($tempCaptchaFile);
$captcha = $ocr->getCode();
echo $captcha;
return $captcha;
}
function get($url, $cookie_file, $isCookiesSave = false)
{
// 初始化
$curl = curl_init($url);
$header = array();
$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// 不输出header头信息
curl_setopt($curl, CURLOPT_HEADER, 0);
if ($isCookiesSave) {
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file);
} else {
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
}
// 保存到字符串而不是输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 是否抓取跳转后的页面
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$info = curl_exec($curl);
curl_close($curl);
return $info;
}
function post($url, $data, $cookie_file)
{
// 初始化
$curl = curl_init($url);
$header = array();
$header[0] = 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36';
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// 不输出header头信息
curl_setopt($curl, CURLOPT_HEADER, 0);
// 保存到字符串而不是输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
// post数据
curl_setopt($curl, CURLOPT_POST, 1);
// 请求数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
// 是否抓取跳转后的页面
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
你在第一次获取页面的时候,要保存cookie,然后把你的登录信息、验证码,连着那个cookie一起post过去。如果你直接post,你的验证码永远对应的都是上一次的验证码
看了下,这样的验证码可以做个验证码识别,参考我的一篇文章:https://segmentfault.com/a/1190000004361370
v3.3增加是否允许用户注册选项,重些登陆验证代码,取消SessionTimeout设置,改成前后台登陆验证设置,重写短消息单元,所有短信功能在个页面完成,更改相关短信连接和图片设置,美化相关小图片,修正若干个小问题,全新界面正装上市丰富用户字段,重命名相关文件,以方便使用管理,适合开发规范,重写修改密码,修改资料,店铺标志上传,店铺公告,店铺连接代码,店铺资料修改,商品发布、修改、删除功能,二手
0
你需要保证提交post的session_id与验证码的session_id一致,否则就是验证码错误了。
验证码由你的程序来输出,
用php获取验证码后输出,你再去调用一次要么是过期的验证码,要么就不是你这个session_id的验证码了
找到验证码的URL,在提交的时候请求一个验证码,听过识别,或者是手动输入
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号