0x01 前言
这个事情就比较久远了,由于学校的网络中心使用WEB认证来计费网络流量,所以每次想要上网的话要打开浏览器会自动跳到登录首页输入账号密码上网。当时用的ubuntu的服务器版本,没有界面,更没有什么浏览器了,这样连接网络就存在问题,于是想到用python写一个脚本来模拟http请求登录校园网络
0x02 环境
该脚本使用的python2.7编写,大部分的系统中还是自带这个版本的python,稳定并且也是为了兼容。当然网上也有很多教程使用 Requests 这个第三方库,简单快捷好用,当然推荐去学一下,但前提是先要有网才能下载这个库啊,于是我们用python自带的urllib2 模块来完成简易的http请求登录功能
Requests官网链接:http://cn.python-requests.org/zh_CN/latest/
0x03 脚本
http协议是无状态的,为了记录会话于是使用了cookie来保存会话ID,因为考虑到登录之后可能还有其他的操作,比如说登录之后获取个人信息等,需要先获取这个会话ID再调用接口,于是脚本如下(顺序执行):
- 1.引包
import urllib #提供网页传输编码功能
import urllib2 #包含大多数http基本功能
import cookielib #用于cookie的生成与保存
- 2. 设置cookie
# cookie set
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
- 3.http请求函数(GET/POST)
def send(url,data=None,headers={}):
if data==None:
# GET method
request=urllib2.Request(url,headers=headers)
else:
# encode postdata
post=urllib.urlencode(data)
# POST method
request=urllib2.Request(url,post,headers)
# open url
response=urllib2.urlopen(request)
# return url
return response
- 4.主函数
if __name__=='__main__':
#broswer header
safari_windows='Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13'
safari_iphone='Mozilla/5.0 (iPhone6; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3'
chrome='Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13'
navigator='Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6'
firefox='Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1'
opera='Opera/9.27 (Windows NT 5.2; U; zh-cn)'
#url request
url="http://127.0.0.1" #替换成要请求的url
headers={
'User-Agent':chrome
} #可选择相应的用户代理
data={
'username':'xxxxxxx',
'password':'xxxxxxx',
} #要填写的表单
#print response
a=send(url,data=data,headers=headers)
res=a.read()
index = res.find('You have successfully logged into our system.') #找登录成功会返回的内容
if(index==-1):
print 'login failed !'
else:
print 'login successed !'
0x04 总结
脚本中还提供了几个浏览器用户代理,可用来模拟相应的浏览器完成http请求,服务端会根据这个来判断你当前是哪个浏览器在访问我,可以用这个东西做一些小动作哦~
最后保存了成http.py文件,然后在shell或者cmd控制台执行python http.py
就能成功执行了。