python获取服务器响应cookie的实例


Posted in Python onDecember 28, 2018

总结

调试网站获取cookies时请查看,r.header和r.request.header这两个属性,因为cookie说不准出现在他们俩谁里面。

先贴一个代码

import re
import requests
from bs4 import BeautifulSoup
def printHeaders(headers):
 for h in headers:
 print(h+" : "+headers[h] + '\r\n')

def printCookies(cookies):
 for h in cookies:
 print(h+" : "+cookies[h] + '\r\n')

def loginFw(id,password):
 url = "http://xxxxx/login.asp" 
 try:
 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
   'Host':'www.xxx.org',
   'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
   'Accept-Encoding':'gzip, deflate',
   'Content-Type':'application/x-www-form-urlencoded',
   'Referer':'http://xxx/login.asp',
   'Connection':'keep-alive',
   }
 params = {"Reglname":id,"reglpassword":password}
 r = requests.post(url,data=params,headers=headers)
 printHeaders(r.request.headers) #服务器返回的cookie需要用r.request里的headers来获取
 printHeaders(r.headers) #这里是获取不到服务器返回的cookie的

 r.encoding = 'utf-8'

 return r.text
 except Exception as e:
 print("登陆错误:"+str(e))




ret = loginFw("xxx@qq.com","xxx")
#print(ret)

事情经过

事情的发生是这样的,今天我在调试一个网站的模拟登陆,但是怎么调试都调试不出来这个网站返回的cookie(因为我是用r.headers来获取cookies的),后来我就在想是不是我的请求头没有设置正确,然后我就遍历了r.request.headers,然后这个变量如实的打印了我的请求头的信息,但是我仔细一看cookie怎么出现了变化,咦,这不就是我需要的响应cookie吗!

难道是我对r.request这个对象的理解出错了吗?以前我一直认为这个对象里面存储的是我请求发出去的信息,现在怎么会出现响应cookie呢?

就在我百撕不得其解的时候,我去翻阅了requests库的官方文档关于respond对象中包含的request的解释,它上面写着“The PreparedRequest object to which this is a response.”(表示看不到什么意思,百度翻译也翻译不清楚),咦,好像是和响应有关啊,看来应该是我的理解出现了错误。

更好的解决方案

那当然是用requests提供的"会话对象",他能够自动的保留请求所获取的参数。

具体请跳转传送门:

http://cn.python-requests.org/zh_CN/latest/user/advanced.html#request-and-response-objects

后来

后来我发现原来是因为我在请求头里面写了“Host”,“Referer”,导致Cookie出现异常的原因,所以以后不要随便写这两个参数了,要写就照着封包里的写。

以上这篇python获取服务器响应cookie的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python实现图片转字符画的示例
Aug 22 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Django admin美化插件suit使用示例
Dec 12 Python
python验证码识别实例代码
Feb 03 Python
python Celery定时任务的示例
Mar 13 Python
PyCharm配置mongo插件的方法
Nov 30 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
浅析matlab中imadjust函数
Feb 27 Python
python实现文法左递归的消除方法
May 22 Python
python实现从ftp上下载文件的实例方法
Jul 19 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 #Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 #Python
Python编程图形库之Pillow使用方法讲解
Dec 28 #Python
对python中大文件的导入与导出方法详解
Dec 28 #Python
Python编程深度学习计算库之numpy
Dec 28 #Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 #Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 #Python
You might like
介绍一些PHP判断变量的函数
2012/04/24 PHP
php 批量替换程序的具体实现代码
2013/10/04 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
js实现旋转木马效果
2017/03/17 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
Python库urllib与urllib2主要区别分析
2014/07/13 Python
python交互式图形编程实例(一)
2017/11/17 Python
python解析多层json操作示例
2019/12/30 Python
python随机模块random使用方法详解
2020/02/14 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
Pycharm修改python路径过程图解
2020/05/22 Python
python实现画图工具
2020/08/27 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
教育科研先进个人材料
2014/01/26 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
python b站视频下载的五种版本
2021/05/27 Python
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android