Python自动登录脚本
2016-12-21 16:29
316 查看
一、环境
Python 2.7.x
pip 8.1.1
注意:pip升级后下载依赖包会报certificate verifyfailed
解决办法是加入--trusted-host pypi.python.org
例如:pip install --trusted-host pypi.python.org Exception
二、urllib2
1)Get方式:
# 登录的主页面 hosturl = 'https://10.64.66.137/mdm/web/Login.htm' # 自己填写 # post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据) posturl = 'https://10.64.66.137/mdm/cgi/web_service.dll' # 设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie cj = cookielib.LWPCookieJar() cookie_support = urllib2.HTTPCookieProcessor(cj) opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener) # get方式需要给数据编码 getData = urllib.urlencode({'name': '测试', 'id': 1}) # 打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功) request = urllib2.urlopen("%s?%s" % (hosturl, getData))
2)Post方式:
# 构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。 headers = { 'Host': '10.64.66.137', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.8'} # 构造Post数据,他也是从抓大的包里分析得出的。 postData = {"tmms_action": "login", "data": {"username": "root", "password": "123456", "time": 1482282759}} # post 方式需要将数据转换成对应数据格式,这里是json postData = json.dumps(postData) # 通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程 request = urllib2.Request(posturl, postData, headers) # context = ssl._create_unverified_context() response = urllib2.urlopen(request) text = response.read() print text
注意:
a) urlopen如果有dataurl参数,默认是采用post方式请求,所以如果要采用get方式,参数要和url拼接到一起,并且参数要经过转码
b) post方式请求时,数据转换成json需要用json.dumps而不是urllib.urlencode
三、requests
1)Get方式:
# requests方式进行get请求 request = requests.get(hosturl, params={'gid': '测试'}, headers=headers, verify=False)
2)Post方式:
# 第二种方式:requests方式发送请求 response = requests.post(posturl, data=json.dumps({"tmms_action": "login", "data": {"username": "root", "password": "123456", "time": 1482282759}}), headers=headers, verify=False) text = response.content
注意:
a) requests方式比urllib2来的简洁,不过它进行https请求时如果不处理会报
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed,因此需要在请求最后一个参数加上verify=False就可以解决
b)requests方式在params里面的参数会自动进行转码,不需要再处理了
四、完整代码:
# -*- coding:utf-8 -*-
import HTMLParser
import urlparse
import urllib
import urllib2
import cookielib
import string
import re
import ssl
import json
import requests
# 登录的主页面
hosturl = 'https://10.64.66.137/mdm/web/Login.htm' # 自己填写
# post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据)
posturl = 'https://10.64.66.137/mdm/cgi/web_service.dll'
# 设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
try:
# get方式需要给数据编码
getData = urllib.urlencode({'name': '测试', 'id': 1})
# 打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)
request = urllib2.urlopen("%s?%s" % (hosturl, getData))
# 构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。 headers = { 'Host': '10.64.66.137', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Content-Type': 'application/json', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.8'} # 构造Post数据,他也是从抓大的包里分析得出的。 postData = {"tmms_action": "login", "data": {"username": "root", "password": "123456", "time": 1482282759}} # post 方式需要将数据转换成对应数据格式,这里是json postData = json.dumps(postData) # 通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程 request = urllib2.Request(posturl, postData, headers) # context = ssl._create_unverified_context() response = urllib2.urlopen(request) text = response.read() print text
# requests方式进行get请求
request = requests.get(hosturl,
params={'gid': '测试'},
headers=headers
)
# 第二种方式:requests方式发送请求 response = requests.post(posturl, data=json.dumps({"tmms_action": "login", "data": {"username": "root", "password": "123456", "time": 1482282759}}), headers=headers, verify=False) text = response.contentprint text
except Exception, e:
print str(e)
相关文章推荐
- python登录csdn并自动评论下载资源脚本
- 腾讯微博 自动登录脚本(python)
- 人人网自动登录脚本_python
- linux下使用脚本自动登录远程服务器 - Python - language - ITeye论坛
- selenium+python实现自动登录脚本
- selenium+python自动登录脚本
- 一个桌面脚本:实现163邮箱的自动登录
- 转载:用Python编写自动下载网络小说的脚本
- 自动登录126邮箱的脚本
- 关于sqlplus登录自动运行脚本login.sql
- linux下自动登录ssh/telnet脚本
- expect ssh自动登录脚本和kibitz
- 通过crond自动运行Python脚本实现多台linux服务器的监控
- ftp脚本自动登录
- 自动下载并保存博客 Python脚本
- python自动补全以及自带脚本运行失败解决方法
- VBS取QQ或TM自动登录代码并防止关闭的脚本
- 脚本自动登录ssh
- 使用Python脚本自动修改Windows的IP、网关和DNS设置
- Python Mysql自动备份脚本