python实现虾米音乐自动签到脚本

发布于 2022-08-28 12:32:36 字数 2951 浏览 18 评论 0

初学python以及编程,尝试写这样一个脚本,待成功后才会继续完善。
现在想要实现登陆。
问题:

  1. 请问我这个代码哪儿出了问题?登陆不成功。
  2. headers和postData要写哪些出来,我用HttpFox抓包的。postData有perfect和raw版本,我在写的时候用哪个?
    感谢!

header有如下几项:

(Request-Line)  POST /member/login?callback=jQuery191069041835273338_1398059175342 HTTP/1.1
Host    login.xiami.com
User-Agent  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept  text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer https://login.xiami.com/member/login?spm=a1z1s.6843761.226669510.8.mgS3ty
Content-Length  174
Cookie  __utma=251084815.807798752.1397902515.1398051611.1398059164.8; __utmz=251084815.1397902515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _xiamitoken=5d6acda6813fcfb509c692f961c1db91; _unsign_token=adb241a1ca1e9d88841a8b03f1dfbf0a; CNZZDATA921634=cnzz_eid%3D290074860-1397902517-null%26ntime%3D1398059175%26cnzz_a%3D16%26sin%3Dhttp%253A%252F%252Fwww.xiami.com%252F%26ltime%3D1398044904939%26rtime%3D1; CNZZDATA2629111=cnzz_eid%3D953933079-1397902517-null%26ntime%3D1398059175%26cnzz_a%3D16%26sin%3Dhttp%253A%252F%252Fwww.xiami.com%252F%26ltime%3D1398044905317%26rtime%3D1; __gads=ID=4810f3a98f707097:T=1397902585:S=ALNI_MZIeFDBRyd7UMnR4vzSVgiPocjL1Q; __utmb=251084815.3.10.1398059164; __utmc=251084815; t_sign_auth=3
Connection  keep-alive
Pragma  no-cache
Cache-Control   no-cache

而postData有如下几项:

_xiamitoken 5d6acda6813fcfb509c692f961c1db91
done    http%3A%2F%2Fwww.xiami.com
from    web
havanaId    
email   被我隐去(原始状态)
password    被我隐去(原始状态)
submit  登 录

postData的raw版本:
_xiamitoken=5d6acda6813fcfb509c692f961c1db91&done=http%253A%252F%252Fwww.xiami.com&from=web&havanaId=&email=810233438%40qq.com&password=密码隐去(原始状态)&submit=%E7%99%BB+%E5%BD%95

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

'''
A simple py used to signin xiami
@author:caosz11@mails.tsinghua.edu.cn
'''

import urllib
from urllib import parse
from urllib import request

headers = {'User-Agent' :  'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0', 'Referer' : 'https://login.xiami.com/member/login?spm=a1z1s.6843761.226669510.8.mgS3ty'}

postData = {'email' : 'XXX@qq.com', 'password' : 'XXX', 'done' : 'http%253A%252F%252Fwww.xiami.com', 'submit' : 'E7%99%BB+%E5%BD%95', '_xiamitoken' : '5d6acda6813fcfb509c692f961c1db91'}

postData = urllib.parse.urlencode(postData)
postData = postData.encode('utf-8')

print('Logging...')

req = urllib.request.Request('http://xiami.com/member/login', postData, headers)
result =urllib.request.urlopen(req).read()
result = result.decode('utf-8')
print(result)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

全部不再 2022-09-04 12:32:36

照抄抓包结果是不行的,比如你登陆发的请求中的_xiamitoken,这个肯定不是固定的。

应该先去请求下Login页面,找到 _xiamitoken,然后再拼POST请求。不要直接照抄,凡是看起来可疑的参数,多数是验证用的。

还有你Refer中的login url spm=a1z1s.6843761.226669510.8.mgS3ty 这一堆很可疑啊

划一舟意中人 2022-09-04 12:32:36

直接请求Web页面的话可以参考这个代码(不确定新版页面是否可用):
http://www.luojs.com/2011/03/01/xiami_auto_signin/

但是你会发现其实模拟手机页面要简单很多,可以参考这个代码(目前也应该是可用的):
https://github.com/huxuan/xiami_auto_checkin/blob/master/xiami_auto_checkin.py

至于你代码有什么问题,我觉得应该是那个_xiamitoken的问题,那个值不是固定的,所以你直接传递过去的话应该会有问题。

浮华 2022-09-04 12:32:36

感谢大家的帮助。
我写了一个简要的版本。
https://github.com/caosz11/xiami_signin

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文