Home  >  Article  >  Backend Development  >  curl模拟post数据问题

curl模拟post数据问题

WBOY
WBOYOriginal
2016-06-23 14:03:091011browse

模拟登陆一个页面,用html写一个表单post过去能够登陆,但是用curl就登陆不了。这是什么情况


回复讨论(解决方案)

当然是。。。

代码没写好

看你curl的post过去的数据是否正确

我也是,提示的是传输传递错误

//登陆认证 
$url = "http://211.67.32.144/edu/login!checkLogin.action"; 
$post_data = array( "user_account" => "031140107","user_password" => "02185758","user_roleId"=>"2" ); 
$cookie_jar = tempnam('./temp','cookie');//存放COOKIE的文件 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);   
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);  //保存cookie信息 
$output1 = curl_exec($ch); 
curl_close($ch); 
?>

上面是我的代码,有没有人知道是我的错误在哪

你的错误时只执行了一次 curl_exec($ch)
按现在登录页的设计,用户登录的流程是:
1、进入表单页  在这里sessionid已经传过来了,或与还有token
2、填写表单并提交
3、验证用户是否合法  验证通过后重新设置cookie

你只从第二步开始,那么 CURLOPT_COOKIEJAR 得到的只是第三步产生的cookie
由于缺少第一步的cookie,所以验证不会通过

所以你需要
1、进入表单页,通过 CURLOPT_COOKIEJAR 记录下 cookie
2、进入表单处理页,通过 CURLOPT_COOKIEFILE 传递第一步保存的 cookie

但是我用自己写的html界面,只要保证name相同,我还是可以登录成功啊,我也没有执行第一步啊代码如下

nbsp;HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

 


   仿民院登录 
 
  
  
  
 

 
  

  
  
  
  
  
  
学号:
密码:

  

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn