我想做一个模拟登陆,但是有一个动态参数$content在页面中,每次刷新都会变化。请问怎么样获取后再提交?
<?php
$url="http://www.xxx/admin";//登陆的网址
$ch=curl_init($url);
curl_setopt($h,CURLOPT_RETURNTRANSFER,1);
$str=curl_exec($ch);
$start='<input type="hidden" name="xsrfToken" value="'; //修改这里开始的内容
$end='<fieldset class="form-group">'; //修改这里结束的内容
$wzs=strpos($str,$start); //
$wze=strpos($str,$end); //
$len=$wze-$wzs; //内容的总长度
$content=substr($str,$wzs,$len); //目的:只显示我们需要的那一部分
$content = substr($content,45,32);//获取到$content的值
curl_close($ch);
$url="http://www.xxx/admin/signin"; //模拟post提交登陆
$post_data=array (
"xsrfToken"=>$content,
"username"=>"xxxx@qq.com",
"password"=>"xxxxx"
);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
$output=curl_exec($ch);
curl_close($ch);
echo $output;
你可以看看key的名字,xsrfToken
它就是用来服务器返回给客户端的token,每次都会变化。你需要用webdriver端方式来模拟浏览器提交请求。
xsrfToken一般和session关联的,session又和cookie关联,不懂php,自己找curl如何保持cookie,第二次请求要附带上第一次请求返回的cookie值才行
直接加一个if($content){
$url="http://www.xxx/admin/signin"; //模拟post提交登陆
$post_data=array (
"xsrfToken"=>$content,
"username"=>"xxxx@qq.com",
"password"=>"xxxxx"
);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
$output=curl_exec($ch);
curl_close($ch);
echo $output;
}
就好了,你这是在PHP脚本里面,又不是HTML需要ajax的,写在前面的 就是先运行
补充真实的URL吧,https://www.qmei.me/admin