一、 前言
学校在前段时间关闭了校外访问,但学校在最近突然开放了VPN给学生连接进入校园网。有了入口,在外网就有可能使用爬虫爬取数据。可以简单修改之前的代码,达到外网查询成绩的效果。
二、初步想法
整理了下现在手头拥有的资源。1台香港Linux虚拟主机,无系统权限。1台阿里云Windows server 2008主机,拥有对系统的完全权限。香港虚拟主机托管着成绩查询网站,因为没有系统的权限,所以无法连接L2TP VPN。初步想法是使用阿里云主机连接上VPN,然后香港主机发送请求到阿里云主机,在阿里云主机抓取数据返回香港主机,最后输出结果到前端进行渲染。
当然,也可以把网站直接放到阿里云主机,不用另外一台主机。
三、连接VPN
根据学校提供的VPN账号,在阿里云主机连接上VPN。具体请百度。
连接上VPN后,会有一种问题:PPTP(L2TP) 拨号后,服务器只能访问远端内网,而不能访问外网。如果不能访问外网,那么这个服务器就不能架设给外网访问的网站。这个问题解决方法也很简单。
在CMD执行:
1 |
route -p add 172.16.0.0 mask 255.255.0.0 172.19.***.*** |
添加路由,*号改为你连接此VPN获取的IP地址。
删除路由的方法:
1 |
route DELETE 172.16.0.0 |
关于保持长连接的小技巧:
VPN会定时清理不活跃的连接,所以需要经常发送数据,俗称心跳包。我的做法就是用ping命令来ping内网有效地址。
1 |
ping ***.***.***.***.-t |
*号为内网地址,后面-t参数是定时自动发送ping包。这样可以有效维持一段时间的连接。还需要不时去看看是否断开了。
具体设置方法参考:http://service.tp-link.com.cn/detail_article_414.html
四、修改网站代码,允许跨域请求
1. 允许跨域请求
将抓取数据的PHP代码放到阿里云服务器。然后在PHP头部加入此句:header("Access-Control-Allow-Origin: *"); 允许所有来源的请求。这个中设置方法可能不太安全,建议把星号改成你发送请求的服务器地址。
2. 通过PHP请求另一台服务器的PHP
关键代码:
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 |
$user = $_POST["username"];// 学号 $password = $_POST["password"]; // 密码 $link = "http://***.***.***.***/login.php"; // 你的另外一个服务器的PHP文件 $header = array( "Host:***.***.***.***", "Content-Type:application/x-www-form-urlencoded", 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like <Gecko> </Gecko>Chrome/49.0.2623.75 Safari/537.36' ); // 组装POST请求数据 $data = "username=$user&password=$password"; // 请求另外一台服务器 $ret = curl_post($header, $data, $link); // 返回请求得到的数据回前端 echo $ret; // 封装请求函数,设置请求方法为POST function curl_post($header,$data,$url){ $ch2 = curl_init(); $res= curl_setopt ($ch2, CURLOPT_URL,$url); curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ch2, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_POST, 1); curl_setopt($ch2, CURLOPT_POSTFIELDS, $data); curl_setopt ($ch2, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch2,CURLOPT_HTTPHEADER,$header); $result = curl_exec ($ch2); curl_close($ch2); if ($result == NULL) { return 0; } return $result; } |
五、其他资源
成绩查询网站源代码:https://github.com/ping-xiong/school-report-card
文章评论(2)
看这个就猜到了是广西某科技大学,点开一看还真是
@z7 是的