python爬虫登录网站_【技术贴】简单的Python爬虫:POST模拟登陆校园网

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

原文在我的博客 http://blog.zhenlanbing.com/archives/211

很长时间以来在Linux环境下编程,使用Virtual Box安装CentOS,用NAT网络和端口转发,再使用Putty连接localhost进行编程。但最近我需要在其他教室连接到虚拟机,用Windows远程桌面是一个解决方案。但是只有Windows系统可用,如果我想上课时用手机连就没戏了,所以我开始使用桥接。

桥接的问题是联网。

学校校园网不是免费的,是要登陆才能用。有两种登陆方式,一是Windows客户端,二是网页登陆。不用想,肯定是二。

但我的CentOS系统没有图形界面,所以只能考虑使用脚本模拟用户登录。

首先我们学校校园网认证的网址是http://172.16.8.3,使用火狐浏览器打开,按F12打开开发者工具,点击网络。然后输入用户名,密码登陆,然后就哭了,跳到学校主页去了。我们没有看到想象中的POST请求,而是一个GET请求,说明网页被重定向了。

我开始诅咒火狐不能查看历史请求,但我又想到了另一个方案,我输入错误的密码,这样试一下。果然,火狐显示了POST请求,请求内容如下:

Host: 172.16.8.3

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: mn,zh-cn;q=0.8,zh;q=0.6,en-us;q=0.4,en;q=0.2

Accept-Encoding: gzip, deflate

Referer: http://172.16.8.3/

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 52

DDDDD=4406290&upass=111111&0MKKey=%B5%C7%C2%BC+Login

HTTP头并不重要,重要的是POST部分,也就是:

DDDDD=4406290&upass=111111&0MKKey=%B5%C7%C2%BC+Login

DDDDD是用户名,upass是密码,后面MKKey这个参数应该是对登陆的说明,乱码的原因是学校使用GBK编码,而火狐用的是UTF-8,这不重要,原样发过去就可以了。那么Python代码就很好写了:

import urllib.request

postdata = “DDDDD=这里换成你的账号&upass=这里换成你的密码&0MKKey=%B5%C7%C2%BC+Login”

postdata = postdata.encode(‘utf-8′)

fp = urllib.request.urlopen(“http://172.16.8.3“, postdata)

mybytes = fp.read()

print(mybytes)

注销校园网的简单的多了,只要GET请求http://172.16.8.3/F.html:

import urllib.request

fp = urllib.request.urlopen(“http://172.16.8.3/F.html“)

mybytes = fp.read()

print(mybytes)

当然,我没有解析HTML而是直接将HTML打印了出来,对于没有学过网页开发的同学就是噩梦,但我建议你登陆、注销后可以通过ping来确定是否已经登录/注销,比如

ping http://www.baidu.com

至此,我的虚拟机可以连接到互联网了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值