一个小demo,使用php的curl模拟浏览器登陆游民星空网站个人中心后,并发帖。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <!--?php header('content-type:text/html;charset=utf-8'); //初始化curl $ch = curl_init(); $date = 'userName=xxxxxxxx&loginPassword=xxxxxxx&persistent=true&showCode=false&code=%E8%BE%93%E5%85%A5%E9%AA%8C%E8%AF%81%E7%A0%8'; //在控制台获取模拟浏览器头部请求数据 $header = array( 'Host:i.gamersky.com', 'http://i.gamersky.com', 'Referer:http://i.gamersky.com/user/login/', 'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' ); //请求的地址,也是表单登陆提交地址 curl_setopt($ch,CURLOPT_URL,'http://i.gamersky.com/user/login'); //CURLOPT_RETURNTRANSFER,1设置保存不输出 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //因为是登陆请求。所以请求方式设置为POST curl_setopt($ch,CURLOPT_POST,1); //登陆所需的表单数据,账号以及密码,在控制台formdate获得(大多数网站登陆提交登陆成功就会跳转找不到表单提交数据,因此可故意输入错误账号就不会有跳转变可查看到formdate数据,有的网站提交并非只有账号和密码,还会包含其他数据必须全部复制过来) curl_setopt($ch,CURLOPT_POSTFIELDS,$date); //模拟浏览器设置请求的header curl_setopt($ch,CURLOPT_HTTPHEADER,$header); //开启cook curl_setopt($ch,CURLOPT_COOKIESESSION,true); //设置cook存储位置在当前路径下cook.txt里 $cookFile = dirname(__FILE__).'/cook.txt'; curl_setopt($ch,CURLOPT_COOKIEFILE,$cookFile); curl_setopt($ch,CURLOPT_COOKIEJAR,$cookFile); curl_setopt($ch,CURLOPT_COOKIE,session_name().'='.session_id()); //开启允许自动跳转,因为登陆成功后都会自动跳转 curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //执行curl $res1 = curl_exec($ch); echo $res1; /*登陆成功后开始模拟后台发说说,流程和登陆一样先发说说抓取formdate提交的数据即是$date2。*/ echo "-----------------------以下是评论</br>"; //用户中心发说说的formdate,内容是curlfashuoshuo6666666666666的 $date2 = 'jsondata=%7B%22content%22%3A%22curlfashuoshuo6666666666666%22%2C%22images%22%3A%22%22%2C%22videos%22%3A%22%22%2C%22clubId%22%3A%220%22%2C%22device%22%3A3%7D'; //因已经跳转到用户中心所以需要重新设置新的头部信息 $header2 = array( 'Host:i.gamersky.com', 'Origin:http://i.gamersky.com', 'Referer:Referer:http://i.gamersky.com/home/', 'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' ); //要提交的目标地址。这里就是说说要提交的地址 curl_setopt($ch,CURLOPT_URL,'http://i.gamersky.com/club/api/addclubcontent'); //设置新的头部信息 curl_setopt($ch,CURLOPT_HEADER,$header2); //设置提交的说说内容 curl_setopt($ch,CURLOPT_POSTFIELDS,$date2); //执行curl,即开始,模拟提交 $res2 = curl_exec($ch); curl_close($ch); echo $res2; ?--> |