12、showdoc带验证码、cookie
<pre><code>python2.7</code></pre>
<pre><code class="language-python">#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
import cookielib
import urllib
import re
import sys
'''''模拟登录'''
reload(sys)
sys.setdefaultencoding("utf-8")
# 防止中文报错
CaptchaUrl = "https://www.showdoc.cc/server/index.php?s=/api/common/verify"
PostUrl = "https://www.showdoc.cc/server/index.php?s=/api/user/login"
# 验证码地址和post地址
cookie = cookielib.CookieJar()
print cookie
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
# 将cookies绑定到一个opener cookie由cookielib自动管理
username = 'ld***'
password = '123*****'
# 用户名和密码
picture = opener.open(CaptchaUrl).read()
# 用openr访问验证码地址,获取cookie
local = open('e:/image.jpg', 'wb')
local.write(picture)
local.close()
# 保存验证码到本地
v_code = raw_input('输入验证码: ')
# 打开保存的验证码图片 输入
postData = {
'username': username,
'password': password,
'v_code': v_code
}
# 根据抓包信息 构造表单
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36',
}
# 根据抓包信息 构造headers
data = urllib.urlencode(postData)
# 生成post数据 ?key1=value1&key2=value2的形式
request = urllib2.Request(PostUrl, data, headers)
# 构造request请求
try:
response = opener.open(request)
result = response.read().decode('utf-8')
# 由于该网页是gb2312的编码,所以需要解码
print result
# 打印登录后的页面
except urllib2.HTTPError, e:
print e.code
# 利用之前存有cookie的opener登录页面
# 生成post数据 ?key1=value1&key2=value2的形式
request2 = urllib2.Request('https://www.showdoc.cc/server/index.php?s=/api/item/myList', headers = headers)
# 构造request请求
try:
response = opener.open(request2)
result = response.read().decode('utf-8')
# 由于该网页是gb2312的编码,所以需要解码
print result
# 打印登录后的页面
except urllib2.HTTPError, e:
print e.code
</code></pre>