php能实现模拟登陆吗
php能实现模拟登陆吗?
用php模拟登陆主要分为三部分
1. post数据。
2.根据返回的http头,从中截出cookie段。
3.伪造http头发送请求。 我这里以用php抓取163相册的需要密码才能访问的目录为例。 $v) { $encoded .= ($encoded ? "&" : "") $encoded .= rawurlencode($k)."=".rawurlencode($v) } $fp = fsockopen($url[host], $url[port] ? $url[port] : 80) if (!$fp) return "Failed to open socket to $url[host]" fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url[path], $url[query] ? "?" : "", $url[query])) fputs($fp, "Host: $url[host]\n") fputs($fp, "Content-type: application/x-www-form-urlencoded\n") fputs($fp, "Content-length: " . strlen($encoded) . "\n") fputs($fp, "Connection: close\n\n") fputs($fp, "$encoded\n") $line = fgets($fp,1024) if (!eregi("^HTTP/1\.. 200", $line)) return $results = "" $inheader = 1 while(!feof($fp)) { $line = fgets($fp,1024) if ($inheader && ($line == "\n" || $line == "\r\n")) { $inheader = 0 } elseif ($inheader) { $results .= $line } } fclose($fp) return $results }
这种模拟登陆其实很简单,php的话主要用curl来实现。仔细研究一下你要抓的站具体是怎么实现用户登录的,可以用wireshark或者burpsuite(建议用后者)抓包看看整个过程都有那几次请求,每次请求都发送了哪些数据,构造好发给他就可以实现登录了。之后获取个人信息就很容易了,找找php解析html库,或者最简单粗暴的就是字符串截取函数加正则表达式,把你想要的数据提取出来就好了。对于你给出的这种验证码属于非常容易识别的验证码了,基本的识别原理参看使用Canvas进行验证码识别。当然比较蛋疼的问题就是网页编码问题,经常爬过来全是乱码,网上找找看转码的方法,都试一下,这是一门玄学,能不能成功看你人品和耐心吧。