Python使用urllib2模拟浏览器请求与Cookie会话保持详解
本文介绍如何使用Python的urllib2库模拟浏览器发起GET和POST请求,并通过urllib.encode()处理表单数据。重点讲解利用cookielib和HTTPCookieProcessor保持会话状态的方法,确保后续请求携带Cookie,避免会话断开。
本文详细介绍在Python中模拟浏览器发送HTTP请求并维持会话状态的具体实现方法,供读者参考学习。
在Python环境中,可以通过urllib2模块轻松实现对网页数据的读取与请求操作。
import urllib2
print urllib2.urlopen('http://www.baidu.com').read()
若需执行页面的POST请求,必须提供包含User-Agent等字段的请求头信息,并指定要提交的POST数据及目标页面URL。
其中的POST数据需经过urllib.encode()处理,其作用是将字典类型的参数转换为“key1=value1&key2=value2”格式的字符串。
import urllib
import urllib2
HEADER = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0',
'Referer' : 'http://202.206.1.163/logout.do'
}
POSTDATA = {
'data1': 'value1',
'data2': 'value2'
}
HOSTURL = 'http://xxx.com'
enpostdata = urllib.urlencode(POSTDATA)
urlrequest = urllib2.Request(hosturl,enpostdata,HEADER)
urlresponse = urllib2.urlopen(urlrequest)
print urlresponse.read()
浏览器在发起请求后通常会维持一段会话状态,该状态信息存储于Cookie中。后续页面请求会将Cookie附加至请求头中;若Cookie丢失,则会导致会话断开。

在Python程序中,需要显式配置以维持Cookie的持久化保存。
# cookie set # 用来保持会话 cj = cookielib.LWPCookieJar() cookie_support = urllib2.HTTPCookieProcessor(cj) opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) urllib2.install_opener(opener)
以下代码将上述关键知识点整合为一个封装库文件,便于直接调用:
# filename: analogop.py
#!/usr/bin/python
# -*-coding:UTF-8 -*-
# author: 初行
# qq: 121866673
# mail: zxbd1016@163.com
# message: I need a python job
# time: 2014/10/5
import urllib
import urllib2
import cookielib
# cookie set
# 用来保持会话
cj = cookielib.LWPCookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener)
# default header
HEADER = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0',
'Referer' : 'http://202.206.1.163/logout.do'
}
# operate method
def geturlopen(hosturl, postdata = {}, headers = HEADER):
# encode postdata
enpostdata = urllib.urlencode(postdata)
# request url
urlrequest = urllib2.Request(hosturl, enpostdata, headers)
# open url
urlresponse = urllib2.urlopen(urlrequest)
# return url
return urlresponse
此处提供测试脚本示例。由于读者可能缺乏现成的测试环境,需自行搭建测试服务器或选择合适网站进行验证:
#filename: test.py
from analogop import geturlopen
postd = {
'usernum': '2011411111',
'upw': '124569',
'userip': '192.168.10.1',
'token': 'xxx'
}
urlread = geturlopen('http://127.0.0.1:8000/login/', postd)
print urlread.read().decode('utf-8')
urlread = geturlopen('http://127.0.0.1:8000/chafen/', {})
print urlread.read().decode('utf-8')
如需了解更多Python相关技术,可查阅本站系列文章:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文所述内容能对读者的Python编程实践提供帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









