python模拟http请求实现网站登录

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就能成功执行了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值