一、使用Fiddler抓取HTTPS设置
(1)菜单栏 Tools > Telerik Fiddler Options 打开“Fiddler Options”对话框
(2)HTTPS设置:选中Capture HTTPS CONNECTs(捕捉HTTPS连接),选中Decrypt HTTPS traffic(解密HTTPS通信),另下拉菜单中选中...from all processess(从所有进程),与lgnore server certificate errors(忽略服务器证书错误)
(3)为Fiddler配置Windows信任:Trust Root Certificate(受信任的根证书)
(4)Connection中选中:Allow remote computers to connect(允许远程连接),Act as system proxy on startup(作为系统启动代理)
(5)重启Fiddler,使配置生效(这一步必须做)
二、使用Fiddler捕捉Chrome的会话
(1)安装SwitchyOmega代理管理Chrome浏览器插件
(2)设置代理服务器为:127.0.0.1:8888
(3)通过浏览器插件换设置好的代理
三、常用请求头
四、Cookie和Session
(1)Cookie:通过客户端记录的信息确定用户的身份
(2)Session:通过服务器记录的信息确定用户的身份
**urllib2在python3.x中被修改成urllib.request
五、函数解析
(1)resoponse = urllib.request.urlopen(url,data=None,timeout=
url:第一个参数必须传送
data:经过编码的post数据,默认为空
timout:可选超时期,默认为60s
(2)response.read():读取返回的文本
(3)response.getcode():返回整数形式的HTTP响应代码
(4)response.geturl():返回的数据的实际url
(5)response.info:返回映射对象(HTTP报头)
(6)urllib.urlencode():转换url编码格式(字符串)
(7)urllib.unquote():解码工作
(8)request.add_data():将data数据传入request内
六、自定义Opener
urlopen函数不支持代理、cookie或者其他的HTTP高级功能,需要使用 build_opener() 函数创建自定义opener对象
(1)Proxy(代理)设置
importurllib.request#定义一个代理开关
proxyWork =True#定义两个代理模式,其中一个为不适用代理
h1 = urllib.request.ProxyHandler({"http":"111.111.111.111:80"})
h2=urllib.request.ProxyHandler()ifproxyWork:
opener=urllib.request.build_opener(h1)else:
opener=urllib.request.build_opener(h2)#使用我们自定义的代理opener的open()方法打开url
response = opener.open("http://www.baidu.com/")
html=response.read()print(html)
(2)Debug Log
importurllib.request#打开HTTP debug log
httpHandler = urllib.request.HTTPHandler(debuglevel=1)#打开HTTPs debug log
httpsHandler = urllib.request.HTTPSHandler(debuglevel=1)#同时使用两种不同的 debug log 模式
opener =urllib.request.build_opener(httpHandler,httpsHandler)#使用install_opener来创建全局的opener
urllib.request.install_opener(opener=opener)#urlopen默认使用之前创建的全局opener
response = urllib.request.urlopen("http://www.baidu.com")
七、Cookie
(1)Cookie格式: Set-Cookie: NAME=VALUE; Expires=DATE ;Path=PATH; Domain =DOMAIN_NAME; SECURE
**登录一般都会现有一个HTTP GET,用于拉取一些信息及获得 Cookie, 然后在HTTP POST 登录
(2)cookielib 模块,主要作用是提供用于存储cookie的对象,Python处理cookie一般是cookielib和HTTPCookieProcessor一起使用
该模块主要包括:CookieJar FileCookieJar MozillaCookieJar LWPCookieJar
(3)CookieJar : 管理HTTP cookie的值,存储HTTP请求生成的cookie、向传出的HTTP请求添加Cookie对象
(4)FileCookieJar(filename(文件名),delayload=None(延迟访问时间),policy=None):创建FileCookieJar 实例,用于检索cookie信息,并将cookie存储到文件中
(5)MozillaCookieJar (filename(文件名),delayload=None(延迟访问时间),policy=None):创建于Mozilla浏览器cookies.txt兼容的FileCookieJar实例
(6)LWPCookieJar (filename(文件名),delayload=None(延迟访问时间),policy=None):创建于libwww-perl的Set-Cookie3文件格式兼容的FileCookieJar实例
(7)代码实例
importurllib.requestimporthttp.cookiejar#声明一个CookieJar对象实例来保存cookie
cookie =http.cookiejar.CookieJar()#利用HTTPCookieProcessor对象创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookiejar=cookie)#通弄过handler来构建opener
opener =urllib.request.build_opener(handler)#此处open方法同urlopen方法
response = opener.open("http://www.baidu.com")#按照标准格式存储Cookie
cookies = ""
for item incookie:
cookies= cookies + item.name + "=" + item.value + ";"
#舍去最后一位的分号
print(cookies[:-1])
使用get方法获取Cookie保存到变量
importurllib.requestimporthttp.cookiejar#设置保存cookie的文件,同级目录的cookie.txt
filename = 'cookie.txt'
#声明一个LWPCookieJar(有save)实现对象实例保存cookie,之后写入文件
cookie = http.cookiejar.LWPCookieJar(filename=filename)#利用HTTPCookieProcessor对象创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookiejar=cookie)#通过handler来构建opener
opener =urllib.request.build_opener(handler)#urlopen默认使用之前创建的全局opener
response = urllib.request.urlopen("http://www.baidu.com")#保存cookie到文件,且忽略cookie失效限制
访问网站获得cookie
importurllib.requestimporthttp.cookiejar#创建LWPCookieJar(有load)实例对象
cookie =http.cookiejar.LWPCookieJar()#从文件中读取cookie内容到变量,忽略cookie的使用失效
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)#创建请求的request
req = urllib.request("http://www.baidu.com")#利用build_opener,创建一个opener
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar=cookie))
response= opener.open(req)
从文件中获取cookie并访问
八、捕捉异常
这样做我们可以首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。
importurllib.request
request= urllib.request.Request('http://www.baidu.com')try:
urllib.request.urlopen(request)excepturllib.request.HTTPError:print("1")excepturllib.request.URLError:print("2")else:print("3")