Python实现模拟浏览器请求及会话保持操作示例


Posted in Python onJuly 30, 2018

本文实例讲述了Python实现模拟浏览器请求及会话保持操作。分享给大家供大家参考,具体如下:

python下读取一个页面的数据可以通过urllib2轻松实现请求

import urllib2
print urllib2.urlopen('http://www.baidu.com').read()

涉及到页面的POST请求操作的话需要提供头信息,提交的post数据和请求页面。

其中的post数据需要urllib.encode()一下,其实就是将字典转换成“data1=value1&data2=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实现模拟浏览器请求及会话保持操作示例

在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程序设计有所帮助。

Python 相关文章推荐
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
python将时分秒转换成秒的实例
Dec 07 Python
Python实现图像的垂直投影示例
Jan 17 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
详解python 内存优化
Aug 17 Python
Python descriptor(描述符)的实现
Nov 15 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
Python3中PyQt5简单实现文件打开及保存
Jun 10 Python
tensorflow 打印内存中的变量方法
Jul 30 #Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 #Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 #Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 #Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 #Python
对TensorFlow的assign赋值用法详解
Jul 30 #Python
Python双向循环链表实现方法分析
Jul 30 #Python
You might like
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
php实现可运算的验证码
2015/11/10 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
Vue实现验证码功能
2019/12/03 Javascript
js实现秒表计时器
2019/12/16 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
Python运用于数据分析的简单教程
2015/03/27 Python
python之PyMongo使用总结
2017/05/26 Python
自定义django admin model表单提交的例子
2019/08/23 Python
np.dot()函数的用法详解
2020/01/17 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
python 图像增强算法实现详解
2021/01/24 Python
一个SQL面试题
2014/08/21 面试题
七年级英语教学反思
2014/01/15 职场文书
三年级数学教学反思
2014/01/31 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
工程索赔意向书
2014/08/30 职场文书
嘉宾邀请函
2015/01/31 职场文书
小学校园广播稿
2015/08/18 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js