虾米自动签到 php,Python脚本实现虾米网签到功能

# -*- coding: cp936 -*-

'''''

Created on 2012-11-15

@author: liushuai

'''

import urllib, urllib2, cookielib, sys

class LoginXiami:

login_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4'}

signin_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4', 'X-Requested-With':'XMLHttpRequest', 'Content-Length':0, 'Origin':'http://www.xiami.com', 'Referer':'http://www.xiami.com/'}

email = ''

password = ''

cookie = None

cookieFile = './cookie.dat'

def __init__(self, email, pwd):

self.email = email

self.password = pwd

self.cookie = cookielib.LWPCookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))

urllib2.install_opener(opener)

def login(self):

postdata = {'email':self.email, 'password':self.password, 'done':'http://www.xiami.com', 'submit':'%E7%99%BB+%E5%BD%95'}

postdata = urllib.urlencode(postdata)

print 'Logining...'

req = urllib2.Request(url='http://www.xiami.com/member/login', data=postdata, headers=self.login_header)

result = urllib2.urlopen(req).read()

self.cookie.save(self.cookieFile)

result = str(result).decode('utf-8').encode('gbk')

if 'Email 或者密码错误' in result:

print 'Login failed due to Email or Password error...'

sys.exit()

else :

print 'Login successfully!'

def signIn(self):

postdata = {}

postdata = urllib.urlencode(postdata)

print 'signing...'

req = urllib2.Request(url='http://www.xiami.com/task/signin', data=postdata, headers=self.signin_header)

result = urllib2.urlopen(req).read()

result = str(result).decode('utf-8').encode('gbk')

self.cookie.save(self.cookieFile)

try:

result = int(result)

except ValueError:

print 'signing failed...'

sys.exit()

except:

print 'signing failed due to unknown reasons ...'

sys.exit()

print 'signing successfully!'

print self.email,'have signed', result, 'days continuously...'

if __name__ == '__main__':

user = LoginXiami('你的登录邮箱', '你的密码')

user.login()

user.signIn()

然后运行一下脚本就可以登录、签到了。

75c3ec071ba7a8ed7ff3a52649804b12.png

后记

有的Discuz!论坛据说是为了防止用户用网页之外的途径向服务器post数据,服务器在每个用户每次登录成功后生成一个叫formhash的值,作为表单的隐藏域返回给客户端(服务端也有保存)。

5e8e49bc612bdb2d26349ddff0cdad79.png

客户端在向服务器post数据的时候,这个值会作为表单的一项数据“神不知鬼不觉”(因为是表单的隐藏域)地一同post过去,服务端收到客户端的post请求后,和服务端的formhash值作对比,就能知道是否是通过浏览器页面的方式post的数据了。

不过如果真的是为了防止这,这个做法真的有用吗?我试了一下,只需用简单的正则分析下登录成功返回的html,找到formhash值,再用上述方法和理论post过去即可,成功的完成了签到的功能。

反正不管怎么说,就是用脚本“假装”地完成了一下用浏览器登录并签到的过程。

附:由于网站可能进行改版或升级,那么向服务器中post的数据可能会有变化,那么就要对代码进行相应调整,故代码仅供研究和学习参考之用。

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值