您的位置:首页 > 编程语言 > Python开发

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)



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: